• Java设计模式----适配器模式


    电子设备之间有线数据传输常用USB来进行,例如现在某果笔记本统一采用了USB type-c接口,而目前绝大多数即用即插存储介质用的是USB type-b接口,那么为了适配,往往需要消费者购买转换坞等中间设备进行过渡,这种模式其实就是程序设计中常用的适配器模式,另一个形象的实例就是扳手为了拧动型号的螺栓,也需要相应的转接头进行适配。


    1.适配器模式

     以上两个例子,体会一下就能明白适配器模式的用途了。

    适配器模式(Adapter Pattern),将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。

    下面是适配器模式的UML类图:

    Target: 客户端所希望的接口;

    Adapter: 适配器,将Target请求适配到Adaptee的相应接口中处理;

    Adaptee: 被适配的接口。

    一般什么时候使用适配器模式呢?系统比较陈旧的时候,客户端更新,而短时间没有办法更新系统,而采取添加中间层的办法采用适配器模式来兼容。


    2.代码实现

    场景是这样的:小红去欧洲旅游,发现欧标插座都是两个圆孔的,需要相应的欧标插头才能插入,而小红的手机充电器的插头是国标的,怎么办呢?只能用适配器,国标插头插入适配器的国标一端,适配器的另一端欧标插头插入欧标插座。

    Socket,定义了插座,提供电源

    /**
     * 插座,供电
     */
    interface Socket {
        void supplyPower();
    }

    欧洲标准插座

    /**
     * 欧洲标准的插座,只能插入欧洲标准插头
     */
    class EuroSocket implements Socket {
    
        @Override
        public void supplyPower() {
            System.out.println("欧洲插座供电。");
        }
    }

    适配器类,根据开闭原则和单一职责原则,可以实现各种标准插座的适配器

    /**
     * 适配器接口,可以实现各种适配器
     */
    interface Adapter {
        void plugin();
    }

    这里只实现欧洲插座标准的适配器

    /**
     *  欧洲插座适配器
     */
    class EuroSocketAdapter implements Adapter {
        private Socket euroSocket;
        public EuroSocketAdapter(final Socket socket) {
            euroSocket = socket;
        }
    
        @Override
        public void plugin() {
            System.out.println("适配器插入欧洲插座。");
            euroSocket.supplyPower();
        }
    }

    调用

    public class AdpaterDemo {
    
        public static void main(String[] args) {
            Adapter adapter = new EuroSocketAdapter(new EuroSocket());
            System.out.println("小红将充电器插入适配器。");
            adapter.plugin();
        }
    }

     输出结果

    小红将充电器插入适配器。
    适配器插入欧洲插座。
    欧洲插座供电。

    3.总结

    下面是与适配器模式“类似”模式与适配器模式的区别:

    适配器模式:为了让客户使用老接口而新增的、客户所期望的接口,代理模式的着眼点在于封装“转换”这一过程;

    代理模式:与被代理的接口相同,控制客户的访问, 代理模式的着眼点在于封装“控制访问”这一过程;

    装饰器模式:加强接口的功能,增加额外效果,装饰器模式着眼点在于封装“额外操作”这一过程;

    外观模式:提供一个简洁的接口,内部处理一系列复杂的逻辑,外观模式着眼于封装“复杂实现”这一过程。

  • 相关阅读:
    装饰器
    内置函数
    文件操作
    函数
    数据结构[总结笔记]
    汉诺塔解题思路
    springboot事物
    mysql5.7.29 zip包安装教程
    mysql常用语句【转载】
    springboot+mysql+jpa+sharding-jdbc+druid读写分离
  • 原文地址:https://www.cnblogs.com/yxlaisj/p/10530225.html
Copyright © 2020-2023  润新知