栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、前言

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

二、场景介绍

本例子采取的是转换电压时候的样例,通过适配器将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);

    
    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 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);
    }
}
四、适配器模式的优缺点分析 优点
  • 在不改变原来的类和方法的基础上,满足自己的使用需求,很好的实现了开闭原则。
缺点
  • 适配器模式大量运用的话,会使得系统不好维护(此时就不如将系统重构了)。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号