`

Proxy模式与Decorator模式的区别

AOP 
阅读更多

proxy模式和decorator模式都是处理两个类的关系,所不同的是两者关系在何时被建立,英文意思说:proxy模式是在编译时建立关系;而decorator模式则可以在运行时构建。

如果我没有理解错的话:老外视图从编译或运行两者语言状态来描述两者区别,我不敢苟同。

我个人认为:应该从业务应用场景来看待两者区别,而不是拘泥于类关系的如何实现上,不同模式区别都是因为关注点不同,Proxy模式关注的代理两个字,是类的代理,也就是一个类的整体代理,一个原始类可能有多个方法,使用代理类,就要尽量对原始类大部分方法从同一个功能触发进行代理,比如权限代理,进而可以发展到动态代理以及AOP。

而Decorator则侧重于增加职责,至于为一个类多个方法增加的职责是否统一不是其关心的,可能不同方法不同职责。

proxy只是对现在功能作了代理,而decorator不是对现在功能代理,是添加新的功能

相对于Decorator而言,通常Proxy是更重量级的。Proxy和Bridge模式也有很多相似之处:透过一个接口去访问真正实现功能的对象。Decorator和Proxy的区别在于,Decorator目标仅仅在于增加某些方法的职责,并不打算全面掌控目标对象,另外,Decorator也并不确定自己将要修饰的可能会是什么对象。Proxy模式则相反,Proxy需要全面了解甚至需要构建被代理对象,而Proxy和被代理对象之间的关系也是静态决定的。有一点是相同的:一个实际对象既可以有多个Decorator,也可以有多个Proxy。
        Proxy和Bridge虽然有相似性,但是Bridge的目的仅仅是为了维持接口和实现的各自演化,Bridge模式并不打算用来支持创建非常复杂的实现。Bridge模式的接口和实现在语意上是完全一致的。而Proxy模式,虽然一般而言Proxy和被代理对象之间具备一致的接口,但这完全是不必要的。当弱化Proxy的额外处理能力,强化Decorator的职责范围,这三个模式之间的实现区别将会不那么显著,我们需要警惕的是,这三者之间的意图则是差别非常巨大的。

分享到:
评论

相关推荐

    设计模式精解-GoF 23种设计模式解析

    2.3 Decorator模式 2.4 Composite模式 2.5 Flyweight模式 2.6 Facade模式 2.7 Proxy模式 3 行为模式.....55 3.1 Template模式 3.2 Strategy模式 3.3 State模式 3.4 Observer模式 3.5 Memento模式 3.6 Mediator...

    36种最新设计模式整理

    Design Pattern: Decorator 模式 41 Design Pattern: Facade 模式 44 Design Pattern: Flyweight 模式 46 Design Pattern: Proxy 模式(一) 48 Design Pattern: Proxy 模式(二) 49 Design Pattern: Chain of ...

    JAVA设计模式chm文档

    设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制...

    java设计模式教程+源代码

    Decorator ( 装饰模式 ) Facade ( 外观模式 ) Flyweight ( 享元模式 ) Proxy ( 代理模式 ) Chain of Responsibility ( 责任链模式 ) Command ( 命令模式 ) Interpreter ( 解释器模式 ) Iterator ( 迭代器模式...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...

    C#版 24种设计模式

    备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor ...

    C#设计模式_设计模式_C#_

    装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令...

    23种设计模式的实现(Java 版),java设计模式

    Factory模式,Prototype模式,Builder 模式,Singleton模式,Facade模式,Proxy模式,Adapter模式,Composite模式,Decorator模式....

    用Java实现23种设计模式

    装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command ...

    C++设计模式(Design Pattern)范例源代码

    装饰者模式(Decorator) 外观模式(Facade) 蝇量模式(Flyweight) 代理模式(Proxy) 行为型: 责任链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式...

    设计模式文档 chm

    设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制...

    C#设计模式(23种设计模式)

    装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令...

    缓存机制(Jive缓存机制的实现)

    从框架结构上看,它采用了很多设计模式,如Factory模式、Proxy模式、Decorator模式、Iterator模式,使得程序易于扩展和移植。从设计细节上看,它采用了很多先进的设计思想和方法,如XML读写配置文件、数据库的缓存和...

    GoF 23种设计模式的详解与应用

    结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...

    设计模式(23种)与设计原则(6种)

    详细描述全部(23种)设计模式与设计原则(6种)。 (一)设计原则包括: 1、开闭原则 2、里氏代换原则 3、依赖转换原则 4、接口隔离原则 5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式...

    java版本二十三种设计模式.zip

    - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰器模式(Decorator) - 桥接模式(Bridge) - 组合模式(Composite) - 外观模式(Facade) - 享元模式(Flyweight) - 观察者模式(Observer) - 模板方法模式...

    01-制造工具的工厂模式(1).html

    装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ) 模板方法模式( ...

    09-通过容器实现的外观模式(2).html

    装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ) 模板方法模式( ...

    00-初探 Laravel 和其中的设计模式(3).html

    装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ) 模板方法模式( ...

    研磨设计模式(完整带书签).part2.pdf

    第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式...

Global site tag (gtag.js) - Google Analytics