定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器模式能使得接口互不兼容的对象能相互合作。适合于希望使用某个类, 但是其接口与已有的代码不兼容的情况。

该模式包含3类对象:

  1. 源对象:已有的代码
  2. 目标对象:新增的代码,与源对象不兼容
  3. 适配器对象

代码实现:

//源对象
public class UsbBPort {  
    public void charge(){  
        System.out.println("usb b充电");  
    }  
}

//目标对象
public interface TypeCPort {  
    void chargeByTypeC();  
}

// 适配器,同时使用两种不兼容的接口
public class UsbBTypeCAdapter implements TypeCPort{  
    private UsbBPort usbBPort;  
  
    public UsbBTypeCAdapter(UsbBPort usbBPort) {  
        this.usbBPort = usbBPort;  
    }  
  
    public void chargeByUsbB(){  
        usbBPort.charge();  
    }  
  
    @Override  
    public void chargeByTypeC() {  
        System.out.println("type c 充电");  
    }  
}

//客户端代码
UsbBPort usbBPort=new UsbBPort();  
UsbBTypeCAdapter adapter=new UsbBTypeCAdapter(usbBPort);  
adapter.chargeByUsbB();  
adapter.chargeByTypeC();

适配器模式的优点是在修改该已有代码的情况下,新增新的适配器,使得相互不兼容的对象相互合作。

使用适配器模式更多情况下是对已有代码一种无奈的妥协,因为很多时候我们并没有权限去修改已有的代码,或者因为已有设计的原因导致直接修改原有对象的成本太高,只能是通过增加复杂度的方式新增适配器来使新的代码来兼容已有的代码。