锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2022-12-02 03:30:00 角度传感器适配器的防脱出结构

一、前言

建议实际敲击样例代码,加深理解

二、场景介绍

本例采用转换电压时的样本,110通过适配器V和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);
    }
}

四、适配器模式的优缺点分析

优点

  • 在不改变原来的类和方法的基础上,满足自己的使用需求,很好的实现了开闭原则。

缺点

  • 适配器模式大量运用的话,会使得系统不好维护(此时就不如将系统重构了)。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章