【设计模式】适配器模式样例与用法介绍

【设计模式】适配器模式样例与用法介绍,第1张

一、前言

建议把样例代码都实际的敲一遍,加深理解

二、场景介绍

本例子采取的是转换电压时候的样例,通过适配器将110V和220V转换为我们苹果的超级快充:5V

三、代码样例

3.1、 电压的输出接口

public interface AC {
    int outputAC();
}

3.2、 110V输出的实现类

public class AC110 implements AC {
    public final int output = 110;

    @Override
    public int outputAC() {
        return output;
    }
}

3.3、 220V输出的实现类

public class AC220 implements AC {
    public final int output = 220;

    @Override
    public int outputAC() {
        return output;
    }
}

3.4、 场景分析

由于110和220V都无法给手机直接充电,所以我们加入适配器(在不改变原来的类和方法的基础上,通过继承或实现,实现我们需要的功能 -> 开闭原则)。

3.5、 适配器接口的定义

public interface DC5Adapter {
    /**
     * 用于检查输入的电压与适配器是否向匹配
     */
    boolean support(AC ac);

    /**
     * 将电压变换为5V后输出
     */
    int outputDC5V(AC ac);
}

3.6、 220V适配器的制造

public class ChinaPowerAdater implements DC5Adapter {
    public static final int voltage = 220;

    @Override
    public boolean support(AC ac) {
        return (voltage == ac.outputAC());
    }

    @Override
    public int outputDC5V(AC ac) {
        int adapterInput = ac.outputAC();
        //变压器
        int adapterOutput = adapterInput / 44;
        System.out.printf("使用中国的变压器,输入的AC为%sV,输出的DC为%sV%n", adapterInput, adapterOutput);
        return adapterOutput;
    }
}

3.7、 110V适配器的制造

public class JapanPowerAdater implements DC5Adapter {
    public static final int voltage = 110;

    @Override
    public boolean support(AC ac) {
        return (voltage == ac.outputAC());
    }

    @Override
    public int outputDC5V(AC ac) {
        int adapterInput = ac.outputAC();
        //变压器
        int adapterOutput = adapterInput / 22;
        System.out.printf("使用日本的变压器,输入的AC为%sV,输出的DC为%sV%n", adapterInput, adapterOutput);
        return adapterOutput;
    }
}

3.8、 适配器的使用方式举例

public class Test {
    private List<DC5Adapter> adapters = Lists.newLinkedList();

    public Test() {
        this.adapters.add(new ChinaPowerAdater());
        this.adapters.add(new JapanPowerAdater());
    }

    /**
     * 根据电压找合适的变压器
     */
    public DC5Adapter getPowerAdapter(AC ac) {
        DC5Adapter adapter = null;

        for (DC5Adapter ad : this.adapters) {
            if (ad.support(ac)) {
                adapter = ad;
                break;
            }
        }
        if (adapter == null) {
            throw new IllegalArgumentException("没有找到合适的变压适配器呢,你没办法充电嘞,哈哈");
        }
        return adapter;
    }

    public static void main(String[] args) {
        Test test = new Test();

        //在中国正常的生活
        AC chinaAc = new AC220();
        DC5Adapter adapter = test.getPowerAdapter(chinaAc);
        adapter.outputDC5V(chinaAc);

        //去日本旅游几天
        AC japanAc = new AC110();
        adapter = test.getPowerAdapter(japanAc);
        adapter.outputDC5V(japanAc);
    }
}
四、适配器模式的优缺点分析 优点
  • 在不改变原来的类和方法的基础上,满足自己的使用需求,很好的实现了开闭原则。
缺点
  • 适配器模式大量运用的话,会使得系统不好维护(此时就不如将系统重构了)。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/735629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存