适配器(Adapter)模式

来源:互联网 发布:禁毒网络知识登录竞赛 编辑:程序博客网 时间:2024/06/05 19:48

1.意图

适配器模式的意图在于,使用不同接口的类所提供的服务为客户端提供它所期望的接口。

2.解释

  • 简单来说,适配器模式可以将适配器中的其他不兼容的对象包装成与另一个类兼容。
  • 在软件工程中,适配器模式是一种软件设计模式,允许将现有类的接口用作另一个接口。它通常用于使现有的类与其他类一起工作,而无需修改其源代码。

3.使用场景

  • 你想使用一个现有的类,它的接口与你所需要的不匹配

  • 你想创建一个可重用的类,与无关或不可预见的类合作(
    不一定具有兼容接口的类)

  • 需要使用几个现有的子类,但是通过对每个子类进行子类化来适应它们的接口是不切实际的。对象适配器可以调整其父类的接口。

  • 大多数使用第三方库的应用程序都使用适配器作为应用程序和第三方库之间的中间层,以将应用程序与库脱钩。如果必须使用另一个库,则只需要新库的适配器,而无需更改应用程序代码。

案例场景:现在新出的手机充电的基本都是TypeC接口,而对于很多用户来说,他们都有usb接口的数据线,为了能让usb接口的数据线给TypeC接口的手机充电,我们则需要有一个usb转TypeC的转换器,这样便能充电了

1.现在我们有一个TypeCCharge接口和UsbCharge类
public interface TypeCCharge {    void chargeWithTypeC();}
public class UsbCharge {    private static final Logger logger = LoggerFactory.getLogger(UsbCharge.class);    public void chargeWithUsb(){        logger.info("phone is charging with usb.");    }}
2.我们期望能使用TypeC接口给手机充电
public class ChargeWithTypeC implements TypeCCharge {    private TypeCCharge typeCCharge;    public ChargeWithTypeC(TypeCCharge typeCCharge) {        this.typeCCharge = typeCCharge;    }    public void setTypeCCharge(TypeCCharge typeCCharge) {        this.typeCCharge = typeCCharge;    }    public void chargeWithTypeC() {        typeCCharge.chargeWithTypeC();    }}
3.现在我们需要一个适配器,达到用TypeC接口给手机充电的目的
public class UsbChargeAdapter implements TypeCCharge {    private UsbCharge usbCharge;    public UsbChargeAdapter() {        usbCharge = new UsbCharge();    }    public void chargeWithTypeC() {        usbCharge.chargeWithUsb();    }}
4.现在我们就能使用TypeC接口给手机充电了
public static void main(String[] args) {        ChargeWithTypeC charge = new ChargeWithTypeC(new UsbChargeAdapter());        charge.chargeWithTypeC();}
参考教程:https://github.com/iluwatar/java-design-patterns/tree/master/adapter