介绍
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
一般以继承A类实现B类的方式进行串联,或在一个类中使用另一个类的对象
适配器模式涉及到了一个单一的类,此类负责加入独立的或不兼容的接口功能。
- 读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
意图
将一个类的接口转换成客户期望的另一个接口,使原本不兼容的接口可以一起工作。
何时使用
- 系统需要使用现有的类,而此类的接口不符合系统的需要。
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
- 通过接口转换,将一个类插入另一个类系统中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)
总的就是当有动机的修改一个正常运行的系统的接口,这时应该考虑使用适配器模式
如何解决:继承或依赖(推荐)
关键代码:适配器继承或依赖已有的对象,实现想要的目标接口
优点
- 可以让任何两个没有关联的类一起运行
- 提高了类的复用
- 增加了类的透明度
- 灵活性好。
缺点:
- 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
- 由于JAVA至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
实例
原有一个接口DC5,用于输出直流电,后有一个类AC220,用于输入220V交流电,现在需要将接口与类进行组合,表示输入交流电输出直流电
UML类图
1、创建接口
1 | //这是原来的体系,需要对它添加新的方法 |
在实际开发中,这就是已有的正常工作的接口
2、创建新类
1 | public class AC220 { |
实际开发中,这个类就是后面想要适配的功能,想将其加入已有的系统中
3、创建适配器类
1 | public class PowerAdapter implements DC5 { |
采用依赖的方式实现适配器,新建适配器类实现原有接口,然后在适配器类中创建需要适配的类对象,在原有接口方法中使用目标对象,即可将两者连接起来,完成适配
4、使用适配器模式
1 | public class Test { |
可以看到,新建一个原有接口的实现类,然后调用接口的方法,就完成了工作。这与没有适配之前相同,也是新建原有接口的实现类,调用方法,唯一不同的只是实现类没有调用外来类对象
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/15/designPattern/2020-03-15-adapterPattern/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!