所有配套代码均在github上:https://github.com/ZHONGHuanGit/DesignPattern
跟着ZHONGHuan学习设计模式
适配器模式
介绍:
现实中适配器存在很多。就好像变压器,我想读这篇文章的你,很可能是一名学生(起码曾经是吧)。因为现在正好在宿舍写这篇blog。我所在的宿舍是会限电的,电压高了会跳闸,不能使用像电磁炉这样的设备,你懂的,大学里,偶尔宿舍成员在宿舍撮一顿,不能用些煮东西的设备,太没人性了有木有(吐槽下学校的制度),但是, 上有一些称为“变压器”的东西,可以帮你解决这个麻烦。变压器能够转变电压。比如把220v的变成110v;因为有了它,宿舍才能吃上顿大锅饭呐!
这里变压器的工作就像适配器模式做的工作一样,所以常常称适配器模式为变压器模式。再用head first上的例子,更形象些。
面向对象适配器:
假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商所涉及出来的接口,不同于旧厂商的接口。
这个适配器如同一个中间人,它将现有的系统和厂商类连起来了。
代码:
有一种绿头鸭属于鸭子的一种,所以其实现如下:
现在为你介绍一个“街头顽禽”,turkey,火鸡,火鸡不会呱呱叫,只会咯咯叫,灰机也会飞,但是飞的不远。给出火鸡的接口
类适配器:

从上面的类图中,应该可以体会出差别,前面的火鸡冒充鸭子的适配器使用的是对象适配器。其实在java中使用的都是这个,类适配器,是一个多重继承的类图,在其它语言如C++中可以得到实现。
适配器模式充满着良好的OO设计原则,例如对象适配器使用对象组合,已修改的接口包装被适配者,这种做法还有额外的优点,就是被适配者的任何子类,都可以搭配着是陪着使用。
也请留意,这个模式是如何把客户和接口绑定起来,而不是和实现绑定起来的。我们可以使用数个适配器,每一个都负责转换不同组的后台类,或者,也可以加上新的实现,只要它们遵守目标接口就可以。
客户使用适配器的过程:
1客户通过目标接口调用适配器的方法对适配器发出请求
2适配器使用被适配者接口,把强求转换成被适配者的一个或多个调用接口
3客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。
关于适配器模式的问与答:
问:一个适配器只能够封装一个类吗p>
答:适配器模式的工作是将一个接口转换成另一个,虽然大多数的适配器模式所采取的的例子都是一个适配器包装一个被适配者,但我们知道这个世界复杂多了,所以可能会遇到一些情况,需要让一个适配器包装多个被适配者。这涉及另一个模式,外观模式。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!