Head First 设计模式之适配器模式与外观模式
前言:
之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西。这样就可以在设计中将类的接口转化为想要的接口,以实现同的接口,此外还将讲述另一个模式,将对象包装起来以简化接口。
1. 适配器简介
1.1 面向对象的适配器
真实世界的适配器比如位于美式插头和欧式插座之间的交流电适配器。面向对象的适配器是什么呢p>
面向对象的适配器是将一个接口转化成另一个接口,以符合客户的期望。
例如已有的一个软件系统,希望它能和一个新的厂商类库搭配使用,但是这个厂商设计出来的接口不同于旧的接口,而你又不想改变现有的代码,所以这个时候就需要一个适配器来完成现有系统和新的厂商类库的对接。
1.2 使用中的适配器
我们在策略模式里举例讲的鸭子。看一个简化版的示例。
1.2.1 鸭子接口
1.2.2 鸭子子类(绿头鸭)实现
1.2.3 新的禽类接口以及具体实现
1.2.4 适配器
1.2.5 测试
结果如下:
该适配器充满了OO设计的原则:使用对象组合,以修改的接口包装被适配者。被是陪者的任何子类都可以搭配着适配器使用。该模式是把客户和接口绑定起来的,而非和实现绑定。
实际上有两种适配器:对象适配器和类适配器。类适配器通过多重继承来实现,而对象适配器利用组合的方式将请求传递给被适配者。
类适配器图:
4. 最少知识原则
最少知识原则:只和你的密友谈话。
最少知识原则告诉我们要减少对象之间的交互。该原则希望在设计时,不要让太多的类耦合在一起,免得修改系统中的一部分,会影响到其他部分。
怎样避免让太多的类耦合在一起呢有以下的方针:
就对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:
l 该对象本身
l 被当做方法的参数而传递进来的对象
l 此方法所创建或实例化的任何对象
l 对象的任何组件
如下示例:
(不要采用这个原则)从气象站取得了温度计对象,然后再从温度计对象取得问题
(采用这个原则)我们在气象站中加进一个方法,用来向温度计请求温度。可以减少我们所依赖的类的数据。
5. 总结
l 当需要使用一个现有的类而其接口并不符合你的需要时,就需要使用适配器。
l 当需要简化并统一一个很大的接口或者一群负责的接口时,使用外观。
l 适配器改变接口以符合客户的期望。
l 外观将客户从一个复杂的子系统中解耦。
l 实现一个适配器的难易视目标接口的大小与复杂而定。
l 实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行。
l 适配器分为对象适配器和类适配器,类适配器需要多重继承。
l 可以为一个子系统实现一个以上的外观。
l 适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!