设计模式——适配器模式

引言

网上有很多介绍设计模式系列的优秀文章,看懂不一定是真懂,能写出来,说出个1、2、3点才算是真的懂了,如果能灵活的应用到工作中才算是真的熟练。

1、模式场景

手机充电器的数据线一端是typec类型连接手机,另一端是usb类型可以连接电脑,现在我们加个usb适配器,使得数据线可以通过220V插座进行充电。

2、模式结构

    目标抽象类 Target(对应模拟场景中的充电器) 适配器类 Adapter(对应模拟场景中usb适配器) 适配者类 Adaptee(对应模拟场景中usb数据线) 客户类 Client(对应模拟场景中手机充电行为)

3、示例代码

适配器模式有对象适配器和类适配器两种实现,本示例采用的是对象适配器方式。

3.1、目标抽象类

public abstract class Target {
          
   
    public void charging(){
          
   
        System.out.println("插座充电");
    }
}

3.2、适配器类

//Usb适配器
public class UsbAdapter extends Target {
          
   

    private Usb usb;

    public UsbAdapter(Usb usb){
          
   
        this.usb = usb;
    }
    @Override
    public void charging() {
          
   
        usb.usbCharging();
    }
}

3.3、适配者类

public class Usb {
          
   
    public void usbCharging(){
          
   
        System.out.println("usb charging ...");
    }
}

3.4、客户端

public class Client {
          
   
    public static void main(String[] args) {
          
   
        Target usbAdapter = new UsbAdapter(new Usb());
        usbAdapter.charging();
    }
}

控制台输出:

usb charging ...

4、模式优点

    将目标类和适配者类解耦,增加一个适配器类,无需修改原代码逻辑。 增加了类的灵活性、复用性、扩展性。

5、模式缺点

    类适配器模式的缺点是:目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性,且Java是单继承,所以一次最多只能适配一个适配者类。 对象适配器模式的缺点:要想置换适配者类的方法不容易,需要重写适配者类子类方法,再把适配者类的子类当做真正的适配者进行适配,实现过程复杂。

结束语

经验分享 程序员 微信小程序 职场和发展