设计模式篇之适配器模式

案例引入

如果我们要开发一套充电器接口,同时支持安卓的Type-c和苹果的lighting接口,我们可以使用什么设计模式呢?工厂模式,还是抽象工厂模式?但如果我们还有一种需求,让我们的接口可以自动根据充电头的类型进行适配,如果是前两种思想是不行的,因为它无法根据类型进行自动转换。到了这里,我们就不得不提设计模式的中的适配器模式了。

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。适配器在于适配二字,它不是创建新的类型,而是一种聚合再转接的方法。它对外暴露唯一的接口,客户端调用接口无需知道内部的逻辑,系统接口功能的适配由内部解决。

适配器的优缺点

适配器为外提供了统一的接口,降低了系统的耦合性,增加和修改无需修改客户端代码,但也一定层度增加了适配的难度,服务端复杂性有所增加。

优点

  1. 降低了系统的耦合性,增删改适配不同类型的接口无需对暴露接口进行修改

  1. 提高类的复用能力,如使用适配器实现多个类的复用组合

缺点

  1. 适配器让提升了系统的复杂度,系统功能控制难度有所提升(存在适配器适配A型,却错误适配B型的可能)

案例

需求分析

对于前面的案例,我们拓展一下需求:实现一个接口,外部调用无需考虑适配问题,系统内部需要对客户端传递的参数进行解析,选择出正确的接口,最终实现适配器的功能。

代码

外部接口

客户端调用传递参数,选择正确的适配器

public interface charger {
    void charge(String Type);
}
适配器适配方法

此处制定不同适配器的适配实现方法,下面两个类实现接口,实现系统的功能

public interface ChargerAdapter {
    void Type_c_charger(String type);
    void light_charger(String type);
}
public class TypeCharger implements ChargerAdapter{
    @Override
    public void Type_c_charger(String type) {
        System.out.println(type);
    }

    @Override
    public void light_charger(String type) {

    }
}
public class UsbCharger implements ChargerAdapter{
    @Override
    public void Type_c_charger(String type) {

    }

    @Override
    public void light_charger(String type) {
        System.out.println(type);
    }
}
在此处不同方法的适配
public class Adapter implements charger{
    ChargerAdapter chargerAdapter;
    public Adapter(String type){
        if(type.equalsIgnoreCase("type")){
            chargerAdapter = new TypeCharger();
        }else{
            chargerAdapter = new UsbCharger();
        }


    }
    @Override
    public void charge(String type) {

        if(type.equalsIgnoreCase("type")){
            chargerAdapter.Type_c_charger(type);
        }else{
            chargerAdapter.light_charger(type);
        }


    }
}
客户端调用
public class Application {
    public static void main(String[] args) {
          AdapterMode adapterMode1=new AdapterMode();
          adapterMode1.charge("Type");

          AdapterMode adapterMode2=new AdapterMode();
          adapterMode2.charge("light");


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值