在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
介绍
适配器模式就像旅行插座转换器,Type-c转VGA转接口一样,将原本不兼容的东西转换适配从而可以一起工作。
手机想要投影到投影仪上,由于手机是Type-c接口,投影仪是VGA接口。不能直接投影,需要一个适配器,将视频信号从Type-c口转到VGA口,最后才能输出到大屏幕上。
适配器模式结构图
如上图所示,Client不能直接访问Adaptee。Adapter是适配器,它将Adaptee转换成Client能访问的接口。所以通过适配器Adapter,用户端就可以访问Adaptee。
使用场景
想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。
样例代码实现
有一个适配器,一号口是typec口,二号口是vga口,只有将视频信号从typec口输入,转换输出到vga口,才能和投影仪对接,实现手机屏幕投影到投影仪上的任务。
涉及的物品有:手机、适配器、投影仪。
定义一个手机,它有个typec口,这是视频源。
定义一个vga接口
实现一个适配器
适配器实现方式分三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
类的适配器模式:通过继承特性来实现适配器功能。
对象的适配器模式:通过组合方式来实现适配器功能。
接口的适配器模式:借助抽象类来实现适配器功能。
定义三个接口
定义一个抽象类
实现一个VGA适配器
定义一个显示屏,用来测试上面实现的三个适配器
输出结果展示
总结
适配器模式在源码中的应用:
- JDK源码的IO模块用到,例如 java.io.InputStreamReader(InputStream)、java.io.OutputStreamWriter(OutputStream)。
- mybatis源码日志模块用到对象适配器模式。
适配器模式将一个接口转为另外一个接口。它有三种实现方式:
- 当希望将一个类转换为满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
- 当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Typec2Vga2 类,持有原类的一个实例,在Typec2Vga2 类的方法中,调用实例的方法就行。
- 当不希望实现一个接口中所有的方法时,可以创建一个抽象类Adapter ,实现所有方法,我们写别的类的时候,继承抽象类即可。
v1.4.14