C++设计模式---适配器模式

1、介绍

        适配器模式(Adapter Pattern)是一种结构型设计模式,它允许一个类的接口与另一个不兼容的接口协同工作。适配器模式主要解决的是接口不兼容的问题,通过将一个类的接口转换成客户端所期望的另一个接口,使得原本不兼容的接口能够协同工作。

适配器模式主要包含三种角色:

        (1)目标接口(Target):客户端所期望的接口。目标接口可以是抽象类或接口,定义客户端期望的方法。

        (2)适配者(Adaptee):现有需要适配的接口。适配者通常是一个已经存在的类,其接口不符合客户端的期望。

        (3)适配器(Adapter):适配器类是适配器模式的核心。适配器将客户端的请求转换为对适配者的相应接口的调用。适配器可以是抽象类的子类,也可以是接口的实现类。适配器通过继承或持有适配者的方式,实现目标接口并调用适配者的方法。

2、示例

        假设有一个旧的LegacyMediaPlayer类,它有一个playOldFormat(const std::string& file)方法用于播放老格式的音乐文件。现在,想让它兼容一个新的接口MediaPlayer,该接口有一个play(const std::string& file)方法。

        定义新的MediaPlayer接口和旧的LegacyMediaPlayer类;创建一个适配器类MediaAdapter,它继承自MediaPlayer接口并持有一个LegacyMediaPlayer对象。在适配器中,可以实现play方法,该方法调用LegacyMediaPlayerplayOldFormat方法。客户端代码可以使用新的MediaPlayer接口来播放音乐,而不需要关注底层实现细节。

#include <iostream>

// 新的MediaPlayer接口  
class MediaPlayer {  
public:  
    virtual ~MediaPlayer() = default;  
    virtual void play(const std::string& file) = 0;  
};  
  
// 旧的LegacyMediaPlayer类  
class LegacyMediaPlayer {  
public:  
    void playOldFormat(const std::string& file) {  
        // 假设这里实现了播放老格式文件的逻辑  
        std::cout << "Playing old format: " << file << std::endl;  
    }  
};

// 适配器类  
class MediaAdapter : public MediaPlayer {  
private:  
    LegacyMediaPlayer legacyPlayer;  
  
public:  
    void play(const std::string& file) override {  
        legacyPlayer.playOldFormat(file);  
    }  
};

int main() {  
    MediaPlayer* player = new MediaAdapter();   // 使用适配器  
    player->play("some_old_format_file.mp2");   // 播放老格式文件  
    delete player;                              // 释放资源  
    return 0;  
}

结果:

Playing old format: some_old_format_file.mp2

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。它通常用于解决两个已有接口之间不兼容的问题。 在给出的代码示例中,我们可以看到适配器模式的应用。在Main.cpp文件中,创建了一个Target对象指针target,并将其初始化为Adapter对象。然后调用target的request()函数,实际上调用的是Adapter的request()函数。而Adapter的request()函数内部调用了Adaptee的specificRequest()函数,完成了适配的过程。 在Head.h文件中定义了三个类:Target、Adaptee和Adapter。Target类是适配器模式中的目标接口,定义了一个虚函数request()。Adaptee类是被适配的类,它有一个特殊的请求函数specificRequest()。Adapter类是适配器类,它继承了Target类,并在其request()函数中调用了Adaptee类的specificRequest()函数。 通过适配器模式,我们可以将不兼容的两个接口进行适配,使它们能够协同工作。这在软件开发中经常用于复用已有代码或集成多个系统。 参考: C++设计模式适配器模式Adapter Head.cpp Main.cpp<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++设计模式适配器模式(Adapter)](https://download.csdn.net/download/weixin_38666785/12761879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++设计模式-适配器模式](https://blog.csdn.net/qq78442761/article/details/95766831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值