设计模式——适配器模式

适配器模式本质是为了解决 对接另外一个接口时,发现两边的数据格式或者一些原因导致不能直接对接;这是很正常的现象;当为了实现低耦合即尽量不要修改大量代码去适配对接接口,就应该抽象出一层适配层,即适配类来完成两边的对接工作。

适配器模式分为两种

  1. 类适配方式,即通过继承来完成
  2. 对象适配方式,即通过代理来完成

都通过 220V电源 向 5V电源 适配的案例来举例

第一种方式--类适配:

220V 电源类
// 220V 电源类
public class Volate220V {
    //输出220v的电压
    public int output220V(){
        int src = 220;
        System.out.println("电压="+src + "伏");
        return src;
    }
}
定义一个输出5V的接口
//适配接口
public interface IVoltage5V {
    public int output5V();
}
适配类
//适配器类
public class VoltageAdapter  extends Volate220V implements IVoltage5V {
    @Override
    public int output5V() {
        //获得到220v电压
        int srcV = output220V();
        int dstV = srcV / 44;//转换成5V
        return dstV;
    }
}
使用
public class Client {
    public static void main(String[] args){
        VoltageAdapter voltageAdapter = new VoltageAdapter();
        voltageAdapter.output5V();
    }
}

第二种方式:对象适配

定义一个适配接口,适配5V电源
//适配接口
public interface IVoltage5V {
    public int output5V();
}
220V电源类
//被适配的类
public class Volate220V {
    //输出220v的电压
    public int output220V(){
        int src = 220;
        System.out.println("电压="+src + "伏");
        return src;
    }
}
适配器类
//适配器类
public class VoltageAdapter implements IVoltage5V {
    
    private Volate220V volate220V;//关联关系-聚合

    //通过构造器,传入一个Volate220V实例
    public VoltageAdapter(Volate220V volate220V) {
        this.volate220V = volate220V;
    }

    @Override
    public int output5V() {
        //获得到220v电压
        int dst = 0;
        if (volate220V != null){
            int srcV =  volate220V.output220V();//获取220v电压
            System.out.println("使用对象适配器,进行适配~");
            dst = srcV / 44;//转换成5V
            System.out.println("适配完成,输出的电压为="+dst);
        }

        return dst;
    }
}
使用
public class Client {
    public static void main(String[] args){
        VoltageAdapter voltageAdapter = new VoltageAdapter(new Volate220V());
        voltageAdapter.output5V();
    }
}

我比较常用第二种,因为聚合优于继承

posted @ 2021-09-30 22:50  明月照江江  阅读(76)  评论(0编辑  收藏  举报