对于装饰器模式与代理模式的个人理解

对于这两个十分接近的设计模式,确实容易产生困惑,代理模式和装饰器模式看起来十分相似,都是由两个类实现相同的接口,然后一个类套另一个类。这件事足足困扰了我5分钟之久,在此总结一下它们的差别。

目的不同

当你想要增强你的类,给你的类增加新功能的话,你就该使用装饰器模式了。
装饰器模式由于添加了功能,通常会增加性能开销。

而当你想要尽可能的少去调用你的类的话,请使用代理模式。另外,日志之类的功能也建议写在代理模式中。
代理模式会尽可能的将耗费性能的操作留到需要时再使用。不会降低性能开销,但会将卡顿延后或集中。

用法不同

装饰器模式由外部调用,可以自由选择是否使用装饰器,new C(new B(new A()))new C(new A()) 都是可行的(A 为被装饰类)。

代理模式为内部调用,由代理模式内部调用被代理对象。单独的被代理对象很可能功能不全,甚至根本就无法被外部创建,外部调用通常也是直接调用代理。

热门相关:有个人爱你很久   修真界败类   锦庭娇   修真界败类   万古至尊