什么是适配器模式?
两个不兼容的接口之间的桥梁,双方无法直接调用的时候,第三方提供适配能力。
两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。
适用场景
双方直接配合无法进行时,使用适配器模式,对其中一方进行适配。
一方适配另一方的接口
代码实现
案例:VGA转USB适配器
某苹果电脑只有USB接口,现在有个显示器需要VGA接口,提供扩展坞,USB适配VGA接口
/*** USB*/interface USB {void usb();}/*** USB具体实现*/class USBImpl implements USB {@Overridepublic void usb() {System.out.println("USB协议");}}/*** 苹果电脑只有USB接口*/class Mac {/*** 播放*/public void play(USB usb) {usb.usb();}}//现在有VGA,需要适配器/*** VGA*/interface VGA {void vga();}/*** VGA具体实现*/class VGAImpl implements VGA {@Overridepublic void vga() {System.out.println("VGA协议");}}//方式一:使用继承/*** VGA转USB适配器*/class VGA2USBAdapter extends VGAImpl implements USB {@Overridepublic void usb() {super.vga();}}//方式二:使用组合/*** VGA转USB适配器*/class VGA2USBAdapter2 implements USB {private final VGA vga = new VGAImpl();@Overridepublic void usb() {vga.vga();}}/*** 适配器模式测试*/public class AdapterPattern {public static void main(String[] args) {//Mac电脑插入USBMac mac = new Mac();USB usb = new USBImpl();mac.play(usb);//插入适配器VGA转USBUSB vga2USBAdapter = new VGA2USBAdapter();mac.play(vga2USBAdapter);}}
