zoukankan      html  css  js  c++  java
  • 设计模式 适配器模式

    适配器模式(包装器: 接口转换):将类的接口转换成别的规格,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
    核心:接口规格转换,对于线上系统,已有稳定运行的源角色和目标角色,在不改动源角色和目标角色代码的前提下,将源角色对象用于目标角色的接口
    角色:

    • 适配器(Adapter):处理转换逻辑,需实现目标角色的接口(即:对于客户端,适配器行使目标角色功能)
    • 源角色(Adaptee):被转换的角色,数据来源方
    • 目标角色(Target):目标角色,数据接收方(应该以接口方式出现)

    PS:架构设计中,尽量遵循依赖倒置原则,否则将影响到系统的扩展性和维护性

    类适配器(继承关系)

    类适配器:①继承源角色②实现目标接口

    // 适配器类 - 完成数据转换,在客户端被当作Target行使功能
    public class Adapter extends Adaptee implements Target{
        @Override
        public int request() {
            return super.specificRequest() / 2;
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Target target = new Adapter();
            System.out.println(target.request());
        }
    }
    

    对象适配器(组合关系)

    对象适配器:通过关联委托关系与源角色通信②实现目标接口

    // 维护源角色的引用(关联委托关系 - 组合)
    public class Adapter implements Target {
        private Adaptee adaptee = null;
    
        public Adapter(Adaptee adaptee){
            this.adaptee = adaptee;
        }
    
        @Override
        public int request() {
            return adaptee.specificRequest() / 2;
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Target target = new Adapter(new Adaptee());
            System.out.println(target.request());
        }
    }
    
    // 源角色
    public class Adaptee {
        public int specificRequest(){
            return 220;
        }
    }
    
    //目标角色接口
    public interface Target {
        int request();
    }
    
  • 相关阅读:
    react父子组件之间传值
    MVC、MVP、MVVM模式的概念与区别
    exports、module.exports 和 export、export default
    进程与线程以及它们的区别
    axios详解
    箭头函数详解
    ES6扩展运算符...
    vue子组件数据跟着父组件改变
    JS实现千分位
    在.NET Core使用TimeZone将客户端时间转服务器本地时间但编译提示已过期
  • 原文地址:https://www.cnblogs.com/kiqi/p/14058630.html
Copyright © 2011-2022 走看看