《设计模式解析》读书笔记之Adapter Pattern(适配器模式)

本文详细介绍了适配器模式的概念、关键特征及两种实现方式:对象适配器模式和类适配器模式,并通过示例代码展示了这两种模式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Adapter Pattern(适配器模式)


一、Adapter Pattern简介

将一个类的接口装换成客户希望的另外一个接口。Adapter模式使原本接口不兼容而不能一起工作的类可以一起工作

二、Adapter Pattern关键特征

名称说明
意图使控制范围之外的一个原有对象与某个接口匹配
问题系统的数据和行为都正确、接口不符合。通常用于抽象类派生时。
解决方案Adapter模式提供了具有所需接口的包装类
参与者与协作者Adapter改变了Adaptee的接口,使Adaptee与Adapter的基类Target匹配。这样Client就可以使用Adaptee了,就像他是Target类型
效果Adapter模式使原有对象能够适应新的类结构,不受其接口的影响
实现将原有类包含在另一个类中。让包含类与需要的接口匹配,调用被包含类的方法

三、Adapter Pattern的两种方式

对象Adapter模式——上面说的就是对象Adapter模式。因为它依赖于一个对象(适配对象)包含另外一个对象(被适配的对象)。
类Adapter模式——另外一种实现Adapte模式的方式是通过多重继承。这种情况下的Adapter模式被称为类Adapter模式

类Adapter模式的工作原理是创建一个新类,该类同时从两个类继承:
1 从定义接口的抽象公共类继承
2 从访问其实现的原有类私有继承
每个被包装方法都调用其对应的私有继承的方法

对象Adapter模式图示
对象Adapter

类Adapter模式图示
类适配器模式

四、Facade Pattern与Adapter Pattern比较

选项Facade PatternAdapter Pattern
是否存在既有的类
是否必须按照某个接口设计
对象需要多台行为吗可能
需要更就简单的接口吗

五、对象Adapter Pattern

5.1代码


package com.qwm.adapter;

/**
 * Created by qiwenming on 16/6/24.
 * 对象Adapter模式
 */

/**
 * 原有的类
 */
class Adaptee{
    public void specificRequest(){
        System.out.println("特殊请求---");
    }
}

/**
 * 客户希望的接口
 */
interface Target{
    void request();
}

/**
 * 适配器
 */
class Adapter implements Target{
    private Adaptee adaptee = new Adaptee();
    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

/**
 * 客户端
 */
class Client{
    public static void main(String[] args){
        Target target = new Adapter();
        target.request();
    }
}

5.2结果

特殊请求---

六、类Adapter Pattern

6.1代码


package com.qwm.adapter;

/**
 * Created by qiwenming on 16/6/24.
 * 类Adapter模式
 */

class Adaptee2{
    public void specificRequest(){
        System.out.println("class Adapter Pattern 特殊请求");
    }
}

/**
 * 客户希望的接口
 */
interface Target2{
    void request();
}

/**
 * 适配器类: 这里是和对象适配器最大的区别, 类适配器采用的是多重继承
 */
class Adapter2 extends Adaptee2 implements Target2{
    @Override
    public void request() {
        specificRequest();
    }
}

class Client2{
    public static void main(String[] args){
        Target2 target2 = new Adapter2();
        target2.request();
    }
}

6.2结果

class Adapter Pattern 特殊请求

七、源码下载

https://github.com/qiwenming/designpattern/tree/master/src/com/qwm/adapter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值