美文网首页
理解适配器模式

理解适配器模式

作者: 梦的飞翔_862e | 来源:发表于2018-11-23 18:48 被阅读0次
    概念理解

    适配器是将一个接口转换为另一个接口的一种实现,它是一种结构型模式。原接口和目标接口本来不兼容,通过适配器类,可以使用目标接口来调用原接口的方法。

    场景描述

    每个国家的电压是不一样的, 中国室内的电压一般是220v,美国,日本的电压是110v,假设笔记本需要的电压是12.6v 这时,就需要适配器,将室内电压转为笔记本需要的电压。

    设计一:对象适配器

    对象适配器模式是适配器实现目标接口,持有对原接口的引用。

    public interface  ChinaVoltageInterface {
        void use220v();
    }
    
    public class ChinaVoltageInterfaceImpl implements ChinaVoltageInterface {
        @Override
        public void use220v() {
            System.out.println("this is 220v");
        }
    }
    
    public interface NotebookVoltageInterface {
        void use12v();
    }
    
    public class ChinaVoltageToNotebookAdapter implements NotebookVoltageInterface {
        private ChinaVoltageInterface chinaVoltageInterface;
        public ChinaVoltageToNotebookAdapter(ChinaVoltageInterface chinaVoltageInterface) {
            this.chinaVoltageInterface=chinaVoltageInterface;
        }
    
        @Override
        public void use12v() {
            System.out.println("notebook use 12v ");
            System.out.println(" notebook voltage use china voltage");
            chinaVoltageInterface.use220v();
        }
    }
    
    public class TestAPP {
        public static void main(String[] args) {
            ChinaVoltageInterface chinaVoltageInterface = new ChinaVoltageInterfaceImpl();
            NotebookVoltageInterface notebookVoltageInterface = new ChinaVoltageToNotebookAdapter(chinaVoltageInterface);
            notebookVoltageInterface.use12v();
        }
    }
    

    设计二:类适配器模式
    类适配器模式是适配器继承原接口实现类,然后实现目标接口。


    public class ChinaVoltageToNotebookAdapter2 extends ChinaVoltageInterfaceImpl implements NotebookVoltageInterface {
    
        @Override
        public void use12v() {
            System.out.println("notebook use 12v ");
            System.out.println(" notebook voltage use china voltage");
            super.use220v();
        }
    }
    
    public class TestAPP {
        public static void main(String[] args) {
            NotebookVoltageInterface notebookVoltageInterface =new ChinaVoltageToNotebookAdapter2();
            notebookVoltageInterface.use12v();
        }
    }
    
    enumeration转iterator实例:使用适配器
    public class EnumerationIterator implements Iterator {
        private Enumeration enumeration;
    
        public EnumerationIterator(Enumeration enumeration) {
            this.enumeration = enumeration;
        }
    
        @Override
        public boolean hasNext() {
            return enumeration.hasMoreElements();
        }
    
        @Override
        public Object next() {
            return enumeration.nextElement();
        }
    
        @Override
        public void remove() {
            throw new UnsupportedOperationException();
        }
    }
    
    适配器与装饰器的区别

    装饰器是在原接口的基础上增加新的操作,来实现不同的功能,适配器是原有接口的一个伪装,把原接口当做目标接口来使用,并不会增加新的操作。

    代码实例https://github.com/jxl198/designPattern/tree/master/adapter

    相关文章

      网友评论

          本文标题:理解适配器模式

          本文链接:https://www.haomeiwen.com/subject/dlxsqqtx.html