大话设计模式
字体: 16 + -

第212章

小a:“装饰器模式与适配器模式有什么区别?”

大b:“装饰器模式与适配器模式都叫做包装模式(warpper),但装饰器与被装饰具有相同的接口(具体表现为都实现想同的javainterface或装饰器是被装饰类的子类等)。但适配器与被适配的类具有不同的接口(虽然可能用部分重合的api)如bufferedreader是一个decorator因为它接受一个reader对象,但是inputstreamreader它接受一个inputstream对象,把inputstream的api转换成reader的api。半装饰器(退化了的装饰器)如果一个decorator除了提供被装饰类的接口外还提供了另外的方法,就变成了一个半透明的装饰器,客户如果要使用这个特殊的方法说要使用具体的装饰器类,这样就违背了装饰器模式的使用初衷,但实际应用往往无法避免。”