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

    在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。

    在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。

    一、定义

    将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

    二、模式的结构与实现

    1. 模式的结构

    适配器模式(Adapter)包含以下主要角色:

    • 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
    • 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
    • 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

    类适配器模式的结构图:

    对象适配器模式的结构图:

    2. 模式的实现

    (1) 类适配器的模式实现 --- 继承适配者类

    //目标接口
    public interface Target {
        public void request();
    }
    
    //适配者类
    public class Adaptee{
        public void specialRequest(){
            System.out.println("适配者类specialRequest方法被调用");
        }
    }
    
    //类适配器
    public class ClassAdapter extends Adaptee implements Target{
        @Override
        public void request() {
            specialRequest();
        }
    }
    
    //测试
    public class ClassAdapterTest {
        public static void main(String[] args) {
            new ClassAdapter().request();
        }
    }

    (2)对象适配器的模式实现 ---  传入适配者类对象

    //目标接口
    public interface Target {
        public void request();
    }
    
    //适配者类
    public class Adaptee{
        public void specialRequest(){
            System.out.println("适配者类specialRequest方法被调用");
        }
    }
    
    //对象适配器
    public class ObjectAdapter implements Target{
        private Adaptee adaptee;
        public ObjectAdapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public void request() {
            adaptee.specialRequest();
        }
    
    }
    
    //测试
    public class ObjectAdapterTest {
        public static void main(String[] args) {
            Adaptee adaptee = new Adaptee();
            new ObjectAdapter(adaptee).request();
        }
    }

    三、模式的应用场景

    • 以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。
    • 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。

    四、模式的优缺点

    主要优点如下。

    • 客户端通过适配器可以透明地调用目标接口。
    • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
    • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。

    其缺点是:对类适配器来说,更换适配器的实现过程比较复杂。

  • 相关阅读:
    mysql 函数 存储过程 事件(event) job 模板
    protobuf 无proto 解码 decode 语言 java python
    mitmproxy fiddler 抓包 填坑
    android adb 常用命令
    android机器人 模拟 踩坑过程
    RabbitMQ添加新用户并支持远程访问
    Windows下RabbitMQ安装及配置
    Java mybatis mysql 常用数据类型对应关系
    easyExcel 踩坑
    linux防火墙查看状态firewall、iptable
  • 原文地址:https://www.cnblogs.com/myitnews/p/11429195.html
Copyright © 2011-2022 走看看