适配器的定义
在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
适配器的种类
对象适配器模式
用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。
类适配器模式
允许一个Adapter与多个Adaptee—即Adaptee本身以及它的所有子类(如果有子类的话)—同时工作。Adapter也可以一次给所有的Adaptee添加功能。
结构
目标角色(Target):— 定义Client使用的与特定领域相关的接口。
客户角色(Client):与符合Target接口的对象协同。
被适配橘色(Adaptee):定义一个已经存在并已经使用的接口,这个接口需要适配。
适配器角色(Adapte) :适配器模式的核心。它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配.
适配器的在生活中的应用
1.电视接口可以接受不同的音质,能够匹配不同的放映机,原来是DVD的机子,后来结成adapter之后可以匹配CD的放映,只要更改适配的代码,而不用修改全部
2.电脑pc的接口,可以插U盘和连接手机,还可以连接充电,这就是在原有的传输数据的基础上,适配充电的功能,然后可以重载不同的方法接口,连接不同的终端接口,在还可以连接打印机等其他的设备,这根据适配器,能够减少依赖,降低耦合度,便于开发和维护
适配器模式使用注意事项
充当适配器角色的类就是:实现已有接口的抽象类;
为什么要用抽象类?此类是不要被实例化的。而只充当适配器的角色,也就为其子类提供了一个共同的接口,但其子类又可以将精力只集中在其感兴趣的地方。
适配器模式中被适配的接口 Adaptee 和适配成为的接口 Target 是没有关联的,Adaptee 和 Target 中的方法既可以是相同的,也可以是不同的。
适配器在适配的时候,可以适配多个 Apaptee,也就是说实现某个新的 Target 的功能的时候,需要调用多个模块的功能,适配多个模块的功能才能满足新接口的要求。
适配器有一个潜在的问题,就是被适配的对象不再兼容 Adaptee 的接口,因为适配器只是实现了 Target 的接口。这导致并不是所有 Adaptee 对象可以被使用的地方都能是使用适配器,双向适配器解决了这个问题
代码实现
|
|
实现接口
|
|
实现
适配器实现
测试
结果:
the Turkey says…
Gobble gobble
I am flying a short distance
The Duck says…
I am flying
Quack
The TurkeyAdapter says…
I am flying a short distance
I am flying a short distance
I am flying a short distance
I am flying a short distance
I am flying a short distance
Gobble gobble
总结
通过本模式,可以锻炼一种解决方法的途径,不用一直死坑到底,当遇到困难时候,换一个方法去接应原来的方法估计更加完美,就像你要画一个圆,直接画的画你捉不住方向,这时候你可以像画一个正方形,然后慢慢的去掉四个边,然后慢慢磨平棱角,这样你的把握会更加的完美,这就是学习和生活的区别吧,不过学习的模式就是生活方法和经验的总结。加油,GO