ADAPTER(适配器)-- 类对象结构型模式

  1. 意图:
    将一个类的接口转换成客户希望的另外一个接口。
    Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

  2. 别名:
    包装器(Wrapper)。

  3. 动机:

  4. 适用性:
    a. 你想使用一个已经存在的类,而它的接口不符合你的需求。
    b. 你想创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类(即那些接口可能不一定兼容的类)协同工作。
    c. (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

  5. 结构:
    a. 类适配器使用多重继承对一个接口与另一个接口进行匹配,如下图所示:
    适配器模式结构图1

    b. 对象匹配器依赖对象组合,如下图所示:
    适配器模式结构图2

  6. 参与者:
    a. Target: 定义Client使用的与特定领域相关的接口。
    b. Client: 与符合Target接口的对象协同。
    c. Adaptee: 定义一个已经存在的接口,这个接口需要适配。
    d. Adapter: 对Adaptee的接口与Target接口进行适配。

  7. 协作:
    Client在Adapter实例上调用一些操作。接着适配器调用Adaptee的操作实现这个请求。

  8. 效果:
    a. 用一个具体的Adapter类对Adaptee和Target进行匹配。
    b. 使得Adapter可以重定义Adapter的部分行为,因为Adapter是Adaptee的一个子类。
    c. 仅仅引入了一个对象,并不需要额外的指针以间接得到adaptee
    d. 允许一个Adapter与多个Adaptee
    e. 使得重定义Adaptee的行为比较困难。

    需要考虑的一些其他因素:
    a. Adapter的匹配程度
    b. 可插入的Adapter
    c. 使用双向适配器提供透明操作

  9. 实现:
    a. 使用抽象操作
    b. 使用代理对象
    c. 参数化的适配器

  10. 代码示例:

    /**
    * 如上结构图中的第一种方式
    * 可以在Adapter request中实现具体的适配操作
    */
    public interface Target {
        String request();
    }
    
    public class Adaptee {
        public String specificRequest() {
            return  "This is specific request";
        }
    }
    
    public class Adapter extends Adaptee implements Target {
        @Override
        public String request() {
            return super.specificRequest();
        }
    }
    
    public class Client {
        public static void main(String[] args) {
            Target target = new Adapter();
            System.out.println(target.request());
        }
    }
    
    /**
    * 如上结构图中的第二种方式
    * 其他类不变,这里只是通过组合的方式将Adaptee引入
    * 同样可以在Adapter request中实现具体的适配操作
    */
    public class Adapter implements Target {
    
        private static final Adaptee adaptee = new Adaptee();
    
        @Override
        public String request() {
            return adaptee.specificRequest();
        }
    }
    
    
  11. 已知应用:

  12. 相关模式:

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值