适配器模式
基本介绍
- 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)
- 适配器模式属于结构型模式(调节结构的)
- 主要分为三类:
- 类适配器模式
- 对象适配器模式
- 接口适配器模式
适配器模式的工作原理
- 适配器模式:将一个类的接口转换成另一种接口,
让原本接口不兼容的类可以兼容
- 使用户的角度看不到被适配者,是解耦的
- 用户调用适配器转化出来的目标接口方法,适配器再去调用被适配者的相关接口方法
- 用户收到反馈结果,感觉只适合目标接口交互
类适配器模式
被适配的类不满足现有类的需要,需要定义一个接口,让适配器来继承被适配者和接口(接口定义了转换的方法),适配器来实现接口的方法,现有类需要使用到被适配者的时候,需要传入一个接口类对象,然后使用接口类的子类(适配器类),调用适配器对象的转换方法,实现转换
1、由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。 2、src类的方法在Adapter中都会暴露出来,增加了使用的成本
对象适配器
-
在类适配器上加以修改,不再继承src,而是持有src类的实例,解决兼容问题
-
在系统中尽量使用关联关系来代替继承关系
3. 对象适配器是适配器模式中常用的一种
通过adapter中的构造器传入一个被适配类的对象
注意事项和细节
- 对象适配器和类适配器算是同一种思想,实现方法不同而已,根据合成复用原则,将原本的继承改为组合,解决了类适配器必须继承src类的局限性,也不再要求dst必须是接口
- 成本更低,更灵活
接口适配器模式
- 适配器模式(Default) 或者叫做
缺省适配器模式
- 当不需要全部实现接口提供的方法是,可显示设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求
- 适用于一个接口不想使用其所有的方法的情况
优点:1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好(Adapter),重写了src的方法。
缺点: 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。
注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。