书城计算机网络大话设计模式
8183300000212

第212章 9 装饰器模式与适配器模式的区别

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

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