美文网首页
设计模式《适配器模式》

设计模式《适配器模式》

作者: 天道__ | 来源:发表于2018-07-19 17:46 被阅读0次

    引言

      上一节我们讲过迭代器模式,这节我们说说适配器模式。

    示例地址

      Demo地址

    类图

    image

    定义

       适配器模式把一个类的接口变换成客户端所期待的另外一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。

    使用场景

      1. 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
      2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
      3. 需要一个统一的输出接口,而输入端的类型不可预知。

    适配器模式

      我们都知道,去香港旅游需要换上美元。换美元我们去哪换呢。银行,没错银行不仅能够兑换美元,还可以兑换其他的币种。这里银行就是我们设计模式中的适配器。我们看看怎么实现。

    类适配模式

    1. 人民币
    /**
     * 人民币
     *
     * @author 512573717@qq.com
     * @created 2018/7/23  下午3:53.
     */
    public class MoneyRMB {
    
        public void getRMB(int money) {
            System.out.println("我是" + money + "人民币!!!");
        }
    }
    
    2. 美元
    /**
     * 美元
     *
     * @author 512573717@qq.com
     * @created 2018/7/23  下午3:57.
     */
    public interface IMoneyDollar {
        double getDollar(int money);
    }
    
    3. 类适配器(美元转换人民币的适配器)
    /**
     * 美元转换人民币的适配器
     *
     * @author 512573717@qq.com
     * @created 2018/7/23  下午4:01.
     */
    public class MoneyAdapter extends MoneyRMB implements IMoneyDollar {
        @Override
        public double getDollar(int money) {
            System.out.println("人民币转换美元");
            return money / 6.8;
        }
    }
    
    4. Client
      //类适配器
      System.out.println("老王去银行兑换美元");
      MoneyAdapter adapter = new MoneyAdapter();
      double result=adapter.getDollar(100);
      System.out.println("兑换了"+result+"$");
    

    对象适配器

    1. 对象适配器(美元转换人民币的适配器)
    /**
     * 美元转换人民币的适配器
     *
     * @author 512573717@qq.com
     * @created 2018/7/23  下午5:07.
     */
    public class MoneyAdapter implements IMoneyDollar {
    
        private MoneyRMB mMoneyRMB;
    
        public MoneyAdapter(MoneyRMB moneyRMB) {
            mMoneyRMB = moneyRMB;
        }
    
        @Override
        public double getDollar(int money) {
            System.out.println("人民币转换美元");
            return money / 6.8;
        }
    
        public void getRMB(int money) {
            mMoneyRMB.getRMB(money);
        }
    }
    
    2. Client
       // 对象适配器
       System.out.println("老王去银行兑换美元");
       MoneyAdapter adapter = new MoneyAdapter(new MoneyRMB());
       double result = adapter.getDollar(100);
       System.out.println("兑换了" + result + "$");
    

    接口适配器

    1. 先定义接口
    /**
     * 接口
     *
     * @author 512573717@qq.com
     * @created 2018/7/24  下午2:05.
     */
    public interface Port {
    
        // 网络端口80
        void NET();
    
        // Tomcat容器端口8080
        void Tomcat();
    
        // Oracle数据库端口1521
        void Oracle();
    
        // 文件传输FTP端口21
        void FTP();
    }
    
    2. 接口适配器
    /**
     * 接口适配器
     *
     * @author 512573717@qq.com
     * @created 2018/7/24  下午2:06.
     */
    public class PortAdapter implements Port {
        @Override
        public void NET() {
    
        }
    
        @Override
        public void Tomcat() {
    
        }
    
        @Override
        public void Oracle() {
    
        }
    
        @Override
        public void FTP() {
    
        }
    }
    
    3.聊天适配器
    /**
     * 聊天适配器
     *
     * @author 512573717@qq.com
     * @created 2018/7/24  下午2:06.
     */
    public class ChatAdapter extends PortAdapter {
        @Override
        public void NET() {
            System.out.println("HTTP ://Hello world!");
        }
    
        @Override
        public void FTP() {
            System.out.println("FTP:// File upload succeddful!");
        }
    }
    
    4. Client
     //接口适配器
     Port port = new ChatAdapter();
     port.FTP();
     port.NET();
    

    总结

    相关文章

      网友评论

          本文标题:设计模式《适配器模式》

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