设计模式之代理和装饰

设计模式之代理模式和装饰模式的理解

代理模式Proxy

定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。----GoF 的 23 种设计模式

装饰模式Decorator

定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式----GoF 的 23 种设计模式

相同

  1. UML类图基本没区别,都是实现同一个接口,一个类包装另一个类。
  2. 都可以在调用目标功能之前或之后进行其他操作。AOP操作。

不同

  1. 代理模式,意义上侧重被代理对象功能的访问控制;装饰模式,意义上侧重被装饰对象功能的调用增强。

  2. 代理者并不一定是一个被代理者,装饰者一定是一个被装饰者,is-a的区别。

  3. 装饰类只能新增行为,不能跳过其他的任何一个行为。如,检查参数以确定是否调用目标方法,此处有条件跳过方法调用,则属于代理行为。

    原句:I think we’re all aware that the decorator pattern is used to add behavior to existing code. This does not stop at one kind of behavior but any number of different things that we want to do.
    意译:装饰类只能新增行为,不能跳过其他的任何一个行为。

使用

  1. proxy模式比较适合固定的AOP功能需求,decorator模式比较适合动态扩展的AOP需求。即,decorator模式适合在目标接口不变的情况下使用,可满足开闭原则的情况下后期新增增强目标的其他方法。proxy模式适合在目标接口易变情况下使用,可满足开闭原则的情况下后期新加接口不会影响到proxy,重写proxy代码。
  2. decorator模式具有组合性,多个实现间可以组合以获得不同的效果,但增加了实现类数量。常用于功能组合。
  3. proxy模式具有隐藏和隔离性,隐藏目标对象,隔离目标的使用,一定程度上解耦目标对象的创建和使用,但增加了中间代理类。常用于安全访问方面。

参考

  1. https://www.iteye.com/topic/830861
  2. https://blog.csdn.net/wubinbaoyi/article/details/88820070
  3. https://blog.csdn.net/crazy_meng/article/details/51142019
  4. https://zhuanlan.zhihu.com/p/97499017
  5. https://www.jianshu.com/p/c06a686dae39
  6. http://c.biancheng.net/view/1359.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值