Proxy模式与Decorator模式的区别

06-05-11 tomsonxu
看了一篇文章(http://www.javaworld.com/javaworld/jw-02-2002/jw-0222-designpatterns.html)说到:

两个模式比较相似,因为Both patterns use a proxy that forwards method calls to another object, known as the real subject.

两模式的不同之处在于:with the Proxy pattern, the relationship between a proxy and the real subject is typically set at compile time, whereas decorators can be recursively constructed at runtime。

不是很能理解上面所说的不同之处,请各位指教(最好可以举例说明)。谢谢。

              

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

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

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

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

banq
2006-05-13 17:58
相关讨论:

http://www.jdon.com/jive/thread.jsp?forum=91&thread=26552

zhuam
2006-05-14 16:29
嗯, 我同意banq 的观点, proxy 是对类的代理,的确强调的是对已有功能的代理, 而 decorator 我也认为更多的是用于增加装饰,来丰富类的内涵

zhuam
2006-05-14 16:32
用那种环境去讲解设计模式无关紧要,但一定要通俗、易解

猜你喜欢
3Go 1 2 3 下一页