zoukankan      html  css  js  c++  java
  • Design Pattern:适配器模式

    适配器模式

    • 将一个类的接口,转换成客户期待的另一个接口
    • 可以有双向适配器,只要实现了两个接口

    image-20200620211905520

    类适配器

    采用继承的方法

    image-20200620211931711

    // 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
    class Adaptee {
        public void specificRequest() {
            System.out.println("被适配类 具有特殊功能...");
        }
    }
    
    // 目标接口,或称为标准接口
    interface Target {
        public void request();
    }
    
    // 具体目标类,只提供普通功能
    class ConcreteTarget implements Target {
        public void request() {
            System.out.println("普通类 具有普通功能...");
        }
    }
    
    // 适配器类,继承了被适配类,同时实现标准接口
    class Adapter extends Adaptee implements Target{
        public void request() {
            super.specificRequest();
        }
    }
    
    // 测试类
    public class Client {
        public static void main(String[] args) {
            // 使用普通功能类
            Target concreteTarget = new ConcreteTarget();//实例化一个普通类
            concreteTarget.request();
    
            // 使用特殊功能类,即适配类
            Target adapter = new Adapter();
            adapter.request();
        }
    }
    

    对象适配器

    采用组合的方法

    image-20200620212011471

    // 适配器类,直接关联被适配类,同时实现标准接口
    class Adapter implements Target{
        // 直接关联被适配类
        private Adaptee adaptee;
    
        // 可以通过构造函数传入具体需要适配的被适配类对象
        public Adapter (Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        public void request() {
            // 这里是使用委托的方式完成特殊功能
            this.adaptee.specificRequest();
        }
    }
    
    // 测试类
    public class Client {
        public static void main(String[] args) {
            // 使用普通功能类
            Target concreteTarget = new ConcreteTarget();
            concreteTarget.request();
    
            // 使用特殊功能类,即适配类,
            // 需要先创建一个被适配类的对象作为参数
            Target adapter = new Adapter(new Adaptee());
            adapter.request();
        }
    }
    
  • 相关阅读:
    汉诺塔实现笔记
    python-nmap的函数学习
    字符串匹配的KMP算法(转)
    QT下的贪吃蛇
    PentestBox在win10里打不开工具
    Dalvik虚拟机执行流程图
    用dx生成dex时遇到class name does not match path
    python3 小工具
    python3的Cryptodome
    前端学习笔记 day02 CSS
  • 原文地址:https://www.cnblogs.com/cpaulyz/p/13173346.html
Copyright © 2011-2022 走看看