`
shizhi
  • 浏览: 47882 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用proxy模式动态扩展功能

阅读更多
proxy就是代理,也可以叫委托。说通俗点,就是委托第三方给原来的功能动态的添加一些新的功能,但是对于使用者来说却没有丝毫影响,原来的使用方法同样使用于新功能。呵呵,听起来有点玄,其实用到开发上会非常有用,废话不说看代码。

有一个类User代表用户

class User
{
     public function use(p:IProduct):Void
     {
         p.getIt(); //使用产品
     }
}



产品类CProduct以及接口IProduct

Interface IProduct
{
     function getIt():Void
}
class CProduct implements IProduct
{
     public function getIt():Void
     {
         //code in CProduct   //旧的实现功能
     }
}



这是一个典型的基于接口的编程方法,使用也简单:


var user:User = new User();
user.use(new CProduct());



但是功能是可以变的,如果现在我们需要在旧功能上添加一种新的功能,该怎么办,再重写一个实现类吗(工厂模式),这样就不得不把原有的功能再写一遍。而且,原来的功能还要使用,可以说是两种新老功能并存。更不能修改原有的功能。在这里用proxy就比较合适了。


class CNewProduct extends CProduct
{
     public function getIt():Void   //重写原来的方法
     {
          //添加新功能
          super.getIt();   //关键是这里,使用了父类的同名方法
     }
}



proxy在这里使用了继承的方式(继承只是一种实现方式而已)扩展了功能,同时对原有的功能没有任何印象。再看看如何使用


var user:User = new User();
user.use(new CNewProduct());



呵呵,看到了吗,按需使用,原来的代码丝毫不做修改,还是使用use方法,原有的功能也能保留,代码也做到了最大限度的重用。如果以后还要扩展,使用这样的方法将丝毫不会对原系统有任何影响。

小总结一下:
proxy目的:动态地添加新功能,同时保持调用方式不变。
适用范围:
1 动态地添加新功能
2 新功能的使用和原有的方式一致
文章来自: 闪无忧(www.5uflash.com) 详文参考:http://www.5uflash.com/flashjiaocheng/Flashyuweb/908.html
分享到:
评论

相关推荐

    SmartProxy:FirefoxChrome浏览器扩展。 SmartProxy将根据可自定义的模式为您访问的网站自动启用可启用的代理

    SmartProxy是完全使用WebExtensions从头开始编写的,并且比这些代理提供更多的功能。强调根据规则模式自动检测何时启用或禁用某些网站的代理轻松在许多代理服务器之间进行切换,作为您的活动代理服务器设置一键轻松...

    Java 动态代理.md

    代理模式(Proxy Pattern)是 23 种设计模式的一种,属于结构型模式。他指的是一个对象本身不做实际的操作,而是通过其他对象来得到自己想要的结果。这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,...

    proxy-switcher:一个Gnome Shell Extension来切换代理模式

    Gnome Shell扩展,用于在预定义模式“无”,“手动”和“自动”之间切换代理模式。 该扩展程序在网络部分正下方的聚合菜单栏(即主菜单栏)中添加了一个菜单,如下所示: gnome扩展页面在。 使用安装,或者按照下面...

    二十三种设计模式【PDF版】

    设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) ...

    C#23种设计模式_示例源代码及PDF

    装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案, 装饰模式 提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由 一些基本功能的排列组合而产生...

    chrome-simply-proxy:Chrome 的简易代理插件

    通过设置 > 扩展程序 > 开发者模式(开启) > 加载已解压的扩展程序,选择 simply-proxy 文件夹进行安装。 下载 crx 文件安装 功能特点 该扩展主要是为了解决前后端分离开发(如 Vue 项目)的过程中,反向代理配置...

    Proxy Switcher and Manager-crx插件

    工具栏图标表示您的浏览器使用的当前类型的代理(无代理模式(直接),自动检测代理模式,手动模式(袜子和HTTPS)和PAC脚本模式)。扩展的设计使得在面板关闭时不会使用任何资源。特征:1.支持配置文件以存储多个...

    design-pattern-java.pdf

    扩展系统功能——装饰模式(三) 扩展系统功能——装饰模式(四) 外观模式-Facade Pattern 深入浅出外观模式(一) 深入浅出外观模式(二) 深入浅出外观模式(三) 享元模式-Flyweight Pattern 实现对象的复用——...

    FoxyProxy Standard-crx插件

    FoxyProxy简化了配置浏览器以访问代理服务器的过程,提供了比其他代理插件更多的功能 *使用Chrome代理API而不是更改系统代理设置。 *支持自动切换,可根据URL规则在代理之间切换*数据导入/导出*在线规则列表(与...

    java静态代理和动态代理详解

    Java中的代理是一种常见的设计模式,它可以帮助我们在不改变原有代码逻辑的情况下,对现有对象进行增强或扩展。在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定...

    promiseproxy:使用ES2015代理实现回调样式的API

    使用代理的好处是无需扩展或更改原始API实现即可扩展API。 代理的主要功能在不到,因此该方法轻巧且易于审核。 用于 – Promisified – Promisified 关于Proxy 要求 Proxy需要本机ES2015支持,因为在ES5环境中...

    java设计模式CatalogDAOFactory是典型的工厂方法

    在上面的一段代码中一共用了三种模式,除了工厂模式外,还有Singleton单态模式,以及proxy模式,proxy模式主要用来授权用户对forum的访问,因为访问forum有两种人:一个是注册用户 一个是游客guest,那么那么相应的权限就不...

    Java设计模式(含代码)

    就扩展功能而言,Decorator模式比生成子类方式更加灵活。 Facade:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,使得这个子系统更加容易使用。 Factory Method:定义一个用于创建对象...

    js-pattern:js设计模式

    这里我也把平时整体的设计模式分享一下。 设计模式是解决一类问题的模板...代理模式:通过包装一个对象以控制对它的访问,ES6中的Proxy就是通过代理扩展对象功能。 中介者模式:对象之间不直接通信,借助中介对象进行通

    asp.net知识库

    asp.net2.0:扩展ImageButton控件定制自己需要的功能 ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language ...

    Java的三种代理模式.docx

    代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要...

    java 设计模式资料

    就扩展功能而言, 它比生成子类方式更为灵活。 Facade:为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 Factory Method:定义一个用于...

    gogo-proxy:一个用 Go 编写的简单但功能强大的 http 和 websocket 反向代理

    内置平衡模式( Roundrobin 、 Random等...) 健壮:失败时重试请求 灵活的: 自定义错误处理(因此您可以绘制自定义错误页面等...)(使用ErrorHandler ) 自定义请求重写(使用Rewriter ) 您的Balancer查找...

Global site tag (gtag.js) - Google Analytics