• 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();
        }
    }
    
  • 相关阅读:
    用户管理
    网线制作与分类
    5.虚函数,覆盖,多态,异常处理
    4.类的继承
    3.运算符重载
    7.STL
    6.泛型编程与模板
    C++中>>,<<的重载问题
    2.名字空间和构造函数
    1.C和C++的区别
  • 原文地址:https://www.cnblogs.com/cpaulyz/p/13173346.html
Copyright © 2020-2023  润新知