设计模式-Adapter

定义

适配器设计模式是一种结构型设计模式,用于将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器模式包括三种形式:类适配器模式、对象适配器模式、接口适配器模式(或又称作缺省适配器模式)。

类适配器模式是通过继承来实现适配器功能。当我们要访问的接口A中没有我们想要的方法,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。

对象适配器模式是通过组合来实现适配器功能。

如需进一步了解适配器设计模式,建议阅读相关书籍。

实现举例

当然可以,以下是一个使用C++实现的适配器设计模式的例子:

假设我们有一个现有的类RealAudioStream,它实现了音频流数据的读取和写入,但是它的接口不符合我们需要的接口AudioStream。因此,我们需要创建一个适配器类AudioStreamAdapter,它将RealAudioStream的接口适配成AudioStream的接口。

c++ 复制代码
// 现有的类RealAudioStream
class RealAudioStream {
public:
    virtual void open(const char* filename) = 0;
    virtual void close() = 0;
    virtual void read(char* buffer, int size) = 0;
    virtual void write(const char* buffer, int size) = 0;
};

// 需要适配的接口AudioStream
class AudioStream {
public:
    virtual void open(const char* filename) = 0;
    virtual void close() = 0;
    virtual void read(char* buffer, int size) = 0;
    virtual void write(const char* buffer, int size) = 0;
};

// 适配器类AudioStreamAdapter,继承自RealAudioStream和AudioStream
class AudioStreamAdapter : public RealAudioStream, public AudioStream {
public:
    void open(const char* filename) override {
        realStream.open(filename);
    }
    void close() override {
        realStream.close();
    }
    void read(char* buffer, int size) override {
        realStream.read(buffer, size);
    }
    void write(const char* buffer, int size) override {
        realStream.write(buffer, size);
    }
private:
    RealAudioStream& realStream; // 引用RealAudioStream对象,实现适配功能
};

在上面的例子中,AudioStreamAdapter类实现了两个接口RealAudioStreamAudioStream,通过成员变量realStream引用了RealAudioStream对象,实现了适配功能。这样,我们就可以使用AudioStreamAdapter类来适配RealAudioStream类的接口,使其符合AudioStream接口的要求。

总结

适配器设计模式的特性:

  1. 适配器模式是一种结构型设计模式,用于将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
  2. 适配器模式包括三种形式:类适配器模式、对象适配器模式、接口适配器模式(或又称作缺省适配器模式)。
  3. 类适配器模式是通过继承来实现适配器功能。
  4. 对象适配器模式是通过组合来实现适配器功能。
  5. 接口适配器模式是给出一个接口,可以动态选择实现这个接口的具体类,灵活性非常好。
相关推荐
geovindu41 分钟前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
YHHLAI14 小时前
NestJS 后端开发实战:从设计模式到 CRUD 全栈
设计模式
2401_868534781 天前
长远目标 Long-term Goal 老题沿用
设计模式·需求分析
吃饱了得干活1 天前
Java设计模式实战:一个支付模块的重构之旅,层层递进理解设计模式精髓
后端·设计模式·架构
vivo互联网技术1 天前
软件不是从数据开始,而是从现实开始 | KDC 系列 01
设计模式·架构·领域驱动设计
码匠许师傅1 天前
【设计模式精讲】27.模板方法模式(Template Method)
c++·设计模式·uml·模板方法模式
码匠许师傅2 天前
【设计模式精讲】28.访问者模式(Visitor)
java·设计模式·访问者模式
码匠许师傅2 天前
【设计模式精讲】26.策略模式(Strategy)
c++·设计模式·策略模式·uml
Ysx2 天前
AI 问答不再"一本正经地胡说":30 轮提示词迭代,沉淀 4 条防幻觉铁律
设计模式
码匠许师傅2 天前
【设计模式精讲】25.状态模式(State)
c++·ui·设计模式·状态模式·uml