• 设计模式随笔(七):适配器模式


    概述

      以电源插座为例,有三孔插头和二孔插头,各个国家标准不一,国外版笔记本如果想在国内插上插头充电,我们肯定都会准备一个转接头将三孔插头/二孔插头转为跟笔记本电源插头来匹配,充上电。这是我们生活中的适配器。

      在java中,我们把一个类的接口转换成客户端想要的另一个接口(也就是把国内插孔,转为国外插孔),把因为接口不兼容而不能在一起工作的类,通过适配器(Adapter),是他们能够在一起工作。

    UML

      把适配的类的API,转为目标类的API

    类适配器

      Client想要调用-op2方法,但Adaptee并没有提供这个方法,为了使Target能提供-op2这个方法,添加一个中间环节Adapter类继承Adaptee,实现Target接口。因为Adapter和Adaptee是继承关系,决定这个适配器是类适配器

      

    创建Targe接口

    interface Target {
        //这是源类Adapteee没有的方法
        void operation_2();
    }

    创建原类

    class Adaptee {
        public void opration_1() {
    
        }
    }

    创建适配器类

    //适配器Adapter继承自Adaptee,同时又实现了目标(Target)接口。
    class Adapter extends Adaptee implements Target {
    
        //这里的适配器只是将opration_1()方法作了一层封装,封装成Target可以调用的opration_2()而已
        @Override
        public void opration_2() {
            this.opration_1();
        }
    
    }
    

    Client调用

    public class Test{
    
        public static void main(String[] args) {
            Target mAdapter = new Adapter();
            mAdapter.opration_2();
        }
    }
    

      

    对象适配器

      Adapter和Adaptee不再使用继承关系,而是通过委派关系连接到Adapter

      创建Target接口和Adaptee源类与类适配器模式相同,不同点在于Adapter代码。

    class Adapter implements Target{
        // 直接关联被适配类  
        private Adaptee adaptee;
    
        // 可以通过构造函数传入具体需要适配的被适配类对象  
        public Adapter (Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public void operation_2() {
            // 这里是使用委托的方式完成特殊功能  
            this.adaptee.opration_1();
        }
    }  
    

      

    Client调用

    public class AdapterPattern {
        public static void main(String[] args) {
            // 步骤4:定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标
            //需要先创建一个被适配类的对象作为参数  
            Target mAdapter = new Adapter(new Adaptee());
            mAdapter.operation_2();
        }
    }
    

     

     

  • 相关阅读:
    第十章第二节 阿基米德原理
    python-文件读写操作
    pyqt5-控件的显示与隐藏
    pyqt5-控件是否可用
    使用Visual Studio 2015开发Android 程序
    字节序(byte order)和位序(bit order)
    庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)
    H264系列(9):H264中的时间戳(DTS和PTS)
    EMIPLIB简介
    minidump-DMP文件的生成和使用
  • 原文地址:https://www.cnblogs.com/chylcblog/p/13913093.html
Copyright © 2020-2023  润新知