早在19世纪,尼古拉.特斯拉发明了交流电力系统。他也许想象不到,我们要把美国用的电气设备插到欧洲墙上的插座,却没有适配器时的烦恼。设想我在欧洲一个旅管的卫生间里,手拿一个电动剃须刀,看着墙上的插座,却忘了带适配器。现在该怎么办?应该在这儿买个剃须刀吗?可是带回美国还得给它弄个适配器。
在面向对象软件设计中,有时候我们想把有用而经过精心测试的类,用于应用程序的其他新领域。但是,新功能需要新接口,而新接口与复用的现有类不一致的情况非常普遍。此时你也许会问自己:”现在该怎么办?应该改写这些类去适应新的接口吗?可是当我又要加新功能时,我还要再改写吗?人是聪明的,发明了适配器,可以把美国用的插头插到欧洲的插座,或者反过来。在交流电发明多年之后,电源适配器仍然有巨大的需求,没人愿意每出一次国就买个新的剃须刀。同样,我们也不想为新的接口而重写可靠的类。
已有的类与新的接口之间不兼容是问题相当普遍,人们已为它找到了一个解决方案。这个解决方案广为使用,最终被编入设计模式,称为适配器。
适配器模式
适配器模式:将一个类的接口转换成客户希望的另外一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。简单理解就是用于连接两种不同种类的对象,使其毫无顾问地协同工作。
基本上有两种实现适配器的方式:
1、第一种是通过继承来适配两个接口,这称之为类适配器,最早在<<设计模式>>一书中,类适配器是通过多继承实现的。
2、实现适配器模式的第二种方式就是对象适配器。与类适配器不同,对象适配器不继承被适配者,而是组合了一个它的引用。
适配器模式包含如下角色:
Target:目标角色定义客户端具体使用的接口,也就是我们的期望接口,简单一点就是协议,协议定义我们需要的接口
Adaptee:源角色,你想把“谁”转换成目标角色,这个“谁