Proxy模式与Decorator模式的区别

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的职责范围,这三个模式之间的实现区别将会不那么显著,我们需要警惕的是,这三者之间的意图则是差别非常巨大的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值