核心思想
见名知意,是作为两个不兼容的接口的桥梁,属于结构型模式 使得原来由于接口不兼容而不能一起工作的那些类可以一起工作
常见的几类适配器
类的适配器模式 想将一个类转换成满足另外一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可 对象的适配器模式 想将一个对象转换成满足另外一个接口的对象时,可以创建一个适配器类,持有原类的一个实例,在适配类的方法中,调用实例的方法就行 接口的适配器模式 不想实现一个接口中得所有方法时,可以创建一个适配器,实现所有方法,在写别的类的时候,继承适配器类即可
场景使用
在使用一些旧系统或者是类库时,经常会出现接口不兼容的问题,适配器模式在解决这类问题具有优势 学习设计模式一定不要局限代码层面,要从软件系统整体去考虑,而不是为了使用设计模式,而去使用设计模式
优缺点
优点
可以让任何两个没有关联的类一起运行,使得原本由于接口不兼容而不能一起工作的那些类一起工作 增强灵活度,提高复用性,适配器可以在多个系统使用,符合开闭原则
缺点
整体类的调用链路增加 比如 本来A
可以直接调用C
,使用适配器后是A
调用B
,B
再调用C
代码示例(类的适配器模式)
类图
旧的原始类
public class OldModule { public void methodA ( ) { System . out. println ( "OldModule methodA" ) ; } }
新的目标接口
public interface TargetModule { void methodA ( ) ; void methodB ( ) ; void methodC ( ) ; }
适配器
public class Adapter extends OldModule implements TargetModule { @Override public void methodB ( ) { System . out. println ( "Adapter methodB" ) ; } @Override public void methodC ( ) { System . out. println ( "Adapter methodC" ) ; } }
测试
public class AppRun { public static void main ( String [ ] args) { TargetModule targetModule = new Adapter ( ) ; targetModule. methodA ( ) ; targetModule. methodB ( ) ; targetModule. methodC ( ) ; }
}