zoukankan      html  css  js  c++  java
  • 适配器模式(2)

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

    图解

    A、B两个图框代表已经塑模成型的物体A和物体B,现在要求把A和B安装在一起使用,如何安装?两者的接口不一致,是不可能安装在一起使用的,那怎么办?引入一个物体C,如下:

    引入物体C后,C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个完整的物体;其中物体C就是适配器。

    适配器模式的三个角色

    Target目标角色:客户端所调用的接口;

    Adaptee源角色:你想把谁转换成目标角色,这个谁就是Adaptee;

    Adapter适配器角色:适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,他的职责非常简单:把源角色转换为目标角色(通过类继承或者类关联的方式);

    适配器模式的两种情况

    类适配器:类适配器是类间继承;

    Target角色:

    public interface Target {
        /**
         * 目标角色已有的方法
         */
        void request();
    }
    public class ConcreteTarget implements Target {
        @Override
        public void request() {
            System.out.println("If you need any help,pls call me!");
        }
    }

    Adaptee源角色:

    public class Adaptee {
        /**
         * 原有的业务逻辑
         */
        public void doSomething(){
            System.out.println("I'm kind of busy,leave me alone,pls!");
        }
    }

    Adapter适配器角色:

    public class Adapter extends Adaptee implements Target {
    
        @Override
        public void request() {
            super.doSomething();
        }
    }

    客户端调用:

    public class Client {
    
        public static void main(String[] args) {
            //原有的业务逻辑
            Target target = new ConcreteTarget();
            target.request();//If you need any help,pls call me!
            //增加适配器后的逻辑
            Target target1 = new Adapter();
            target1.request();//I'm kind of busy,leave me alone,pls!
        }
    }

    对象适配器:是对象的合成关系,也可以说是类的关联关系(用到的场景较多)

    Target角色和Adaptee源角色同类适配器一样,此处省略,唯一不一样的地方在于适配器类Apdater的编写

    Adapter适配器:

    public class Adapter implements Target {
        /**
         * 此处本应使用接口接收,但是源角色只有类,没有接口,故使用类
         */
        private Adaptee adaptee = null;
        
        public Adapter(Adaptee adaptee){
            this.adaptee = adaptee;
        }
    
        @Override
        public void request() {
            adaptee.doSomething();
        }
    }

    适配器模式的注意事项

    适配器模式最好在详细设计阶段不要考虑它,他不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题;还有一点,项目一定要遵守依赖倒置原则和里氏替换原则,否则即使再适合使用适配器的场合下,也会带来非常大的改造

  • 相关阅读:
    用 HTML 格式导出 Excel 时,如何保留显示网格线
    [转载] 让SciTE能够和IDE一样进行成员提示
    RedHat 上安装多个 mysql 实例并配置 django 连接的操作记录
    我的 SciTEGlobal.properties 配置文件
    FrameSet 不能支持透明
    RedHat 上安装 lighttpd 并配置 fastcgi + django 的记录
    系统设计与开发 辅助工具大集成终结版
    SQL Server Management Object(SMO)大大简化数据库工具的开发 几行代码开发功能强大的SQL工具
    Enterprise Solution 解决方案与源代码下载
    LLBL Gen 实体映射工具技术原理剖析
  • 原文地址:https://www.cnblogs.com/wly1-6/p/10340509.html
Copyright © 2011-2022 走看看