设计模式一: 《用一个营销策略的实例说清楚策略模式的应用场景》
设计模式二: 《用一个股票买卖的例子说清楚观察者模式》
设计模式三: 《用一个苏式面条的实例说清楚装饰者模式》
设计模式四: 《用一个生产手机的简单例子说清楚工厂模式》
设计模式五: 《用不同的实现方式创建单例模式》
设计模式六: 《用一个遥控开关的例子说清楚命令模式》
一、 背景
- 适配器模式是一个比较好理解的设计模式:其核心思想就是创建一个适配器对象(考虑到JAVA没有多重继承的特性,我们这里只介绍对象适配器),把一个接口转换成另外一个接口,使得原本由于接口不兼容的对象能一起工作。
- 我们举实际生活中的一个USB转换器(Apple USB-C 至 USB 转换器)的例子来说明
二、 USB适配器
- 在MacBook上已经拥有了一个USB-C接口
/**
* MacBook USB-C接口
*/
public interface USB_C {
// 该接口可以直接连接USB-C设备
void connect();
}
- 我们手上有个USB-A的设备,希望能连接到MacBook上
/**
* USB-A
*/
public interface USB_A {
void connect();
}
/**
* USB-A设备
*/
public class USB_A_Connection implements USB_A {
@Override
public void connect() {
System.out.println("USB-A设备进行连接");
}
}
- 这时候我们需要借用一个USB适配器,把USB-A转成USB-C的接口,让MacBook可以连上USB-A设备
/**
* USB-C转USB-A适配器
*/
public class USBAdapter implements USB_C {
private USB_A usbA;
public USBAdapter(USB_A usbA) {
this.usbA = usbA;
}
@Override
public void connect(){
System.out.println("插入USB-C转USB-A适配器");
usbA.connect();
}
}
- 最后,我们把U盘插到USB适配器上完成连接
/**
* 把USB-A设备插入适配器
*/
public class Main {
public static void main(String[] args) {
// U盘
USB_A usbA = new USB_A_Connection();
// 插上适配器
USBAdapter usbAdapter = new USBAdapter(usbA);
// U盘与适配器连接
usbAdapter.connect();
}
}
三、总结
- 让我们回顾一下以上转换器例子的UML图
- USB_C称为目标接口
- USB_A_Connection称为被适配者或源接口角色
- USBAdapter就是适配器,它的作用就是将被适配者的源接口转化为目标接口
-
主要优点:
使用适配器模式,程序员不需要修改原有代码而实现重用。 -
主要缺点:
过多使用适配器会导致系统凌乱,且实现过程比较复杂。