适配器模式是一种结构型设计模式,它允许接口不兼容的类能够相互合作。这种模式允许将一个类的接口转换成另一个类的接口,从而使得原本由于接口不匹配而无法在一起工作的类能够协同工作。
适配器模式通常用于以下情况:
- 系统需要使用现有的类,但是其接口与系统要求不一致:当你需要使用一个已存在的类,但是它的接口与你期望的接口不匹配时,可以使用适配器模式。
- 与第三方库集成:当你需要将自己的类与某个第三方库或组件集成时,可以使用适配器模式来使它们能够协同工作。
- 重用既有的类:当你有一些现有的类,但是它们的接口与你的新代码不兼容时,可以使用适配器模式来重用这些类,而无需修改它们的代码。
#include <iostream>
#include <memory>
using namespace std;/*
适配器模式:让不兼容的接口可以在一起工作
电脑 -》 投影到 -》投影仪上 VGA HDMI TypeCVGA接口的电脑, (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;
}