[C/C++] -- 适配器模式

适配器模式是一种结构型设计模式,它允许接口不兼容的类能够相互合作。这种模式允许将一个类的接口转换成另一个类的接口,从而使得原本由于接口不匹配而无法在一起工作的类能够协同工作。

适配器模式通常用于以下情况:

  1. 系统需要使用现有的类,但是其接口与系统要求不一致:当你需要使用一个已存在的类,但是它的接口与你期望的接口不匹配时,可以使用适配器模式。
  2. 与第三方库集成:当你需要将自己的类与某个第三方库或组件集成时,可以使用适配器模式来使它们能够协同工作。
  3. 重用既有的类:当你有一些现有的类,但是它们的接口与你的新代码不兼容时,可以使用适配器模式来重用这些类,而无需修改它们的代码。
cpp 复制代码
#include <iostream>
#include <memory>
using namespace std;

/*
适配器模式:让不兼容的接口可以在一起工作
电脑 -》 投影到 -》投影仪上     VGA HDMI TypeC

VGA接口的电脑, (TV)投影仪也是VGA接口
*/

class VGA   //VGA接口类
{
public:
    virtual void play() = 0;
    string getType()const {return "VGA";}
};

//TV01表示支持VGA接口的投影仪
class TV01 : public VGA
{
public:
    void play()
    {
        cout << "VGA接口连接投影仪,进行视频播放" << endl;
    }
};

//实现一个平板电脑类(只支持VGA接口)
class MatePad
{
public:
    //由于电脑只支持VGA接口,所以该方法参数只支持VGA接口的指针/引用
    void playVideo(VGA *pVGA)
    {
        pVGA->play();
    }
};

// 进了一批新的投影仪,但是新的投影仪支持HDMI接口,但是电脑只支持VGA接口
class HDMI
{
public:
    void play()
    {
        cout << "HDMI接口连接投影仪,进行视频播放" << endl;
    }
};

//TV02表示支持HDMI接口的投影仪
class TV02 : public HDMI
{
public:
    void play()
    {
        cout << "HDMI接口连接投影仪,进行视频播放" << endl;
    }
};

//由于电脑(VGA接口)和投影仪(HDMI接口)无法直接相连,所以需要添加适配器类
class VGATOHDMIAdapter:public VGA
{
public:
    VGATOHDMIAdapter(HDMI *pHDMI):m_pHDMI(pHDMI){}
    void play()//该方法相当于转换头
    {
        m_pHDMI->play();
    }
private:
    HDMI *m_pHDMI;
};

int main()
{
    MatePad mp;
    //mp.playVideo(new TV01());
    mp.playVideo(new VGATOHDMIAdapter(new TV02()));
    return 0;
}
相关推荐
沫璃染墨1 分钟前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
xiaoye-duck1 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
旖旎夜光2 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
小超人诞生日记3 小时前
C++ 智能指针的使用及其原理详解
c++·算法
akinggw4 小时前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
繁星蓝雨5 小时前
C++设计原理———多重继承(虚基类、菱形继承、委托、重命名、基类和成员初始化)
c++·委托·多重继承·mi·显式初始化列·虚基类·对象布局
旖旎夜光5 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
扶尔魔ocy6 小时前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
akinggw7 小时前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck8 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt