zoukankan      html  css  js  c++  java
  • 七个结构模式之适配器模式(Adapter Pattern)

    定义:
    将一个接口转换为客户需要的另外一个接口,使接口不兼容的类型可以一起工作,也被称为包装器模式(Wrapper Patern)。

    结构图:

    • Target:目标抽象类,客户所需要的接口。
    • Adapter:适配器类需要继承实现Target所定义的接口,并关联一个Adaptee对象,使用其提供的接口来满足Target接口的需求。
    • Adaptee:适配者类,即被适配的类,定义了一个已经存在的接口,需要被适配。一般是一个具体类,包含了客户希望使用的业务方法。

    对象适配模式
    适配器并不继承或实现适配者的接口,而是通过定义一个适配者的成员变脸,调用目标方法。

    class Adapter extends Target {  
        private Adaptee adaptee; //维持一个对适配者对象的引用  
        public Adapter(Adaptee adaptee) {  
            this.adaptee=adaptee;  
        }  
        public void request() {  
            adaptee.specificRequest(); //转发调用  
        }  
    }
    

    类适配器
    类适配器则需要继承或实现适配者的接口和Target接口,这样在Target和Adaptee都是抽象类的情况下,单继承语言就无法使用,因此不太常用。

    class Adapter extends Adaptee implements Target {  
        public void request() {  
            specificRequest();  
        }  
    }
    

    双向适配器
    双向适配器同时实现Adaptee的接口和Target接口,并且同时持有Adapter和Target的引用,然后再内容完成方法的互换。

    缺省适配器(Default Adapter Pattern)
    当不需要实现一个接口所有的方法的时候,可以先设计一个抽象适配器实现该接口,并且该抽象类为接口中的每一个方法提供一个默认实现(空方法),然后改抽象类的子类再选择性地覆盖父类的方法来满足需求。

    注意:

    • 可以将适配器使用XML和反射技术设置成可配置,来动态更改需要使用的适配器。

    优点:

    • 可以将目标类和适配者类进行解耦,引入一个适配器来转发目标类的需求,无需修改原有的机构。
    • 可以隐藏适配者类的具体操作过程,增加类的适配者的复用性和透明性,可以事适配者在多个系统中被复用。
    • 可以灵活地替换适配器来既满足目标需求有可以替换底层实现。
    • 如果使用对象适配器,还可以适配多个是适配者,使他们配合工作满足目标接口的需求。

    缺点:

    • 因为一些语言的不支持多继承的关系,有可能会限制适配者的具体实现形式。

    适用场景:

    • 系统需要使用一些类,但结构不兼容,而且不能修改代码或不知道源码。
    • 需要创造一些可以复用的类,应用于不同的业务逻辑里中。

    代码实例:

    AdapterPattern.java

  • 相关阅读:
    expandablelistview学习在listView里面嵌套GridView
    App数据格式之解析Json
    不应和应该在SD卡应用应用
    9 个用来加速 HTML5 应用的方法
    Android设计模式系列-索引
    ObjectiveC语法快速参考
    App列表显示分组ListView
    进程、线程和协程的图解
    Python多进程原理与实现
    Python多线程的原理与实现
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6011466.html
Copyright © 2011-2022 走看看