设计模式:适配器模式

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

VGA接口的电脑,投影仪也是VAG接口
*/
class VGA//VGA接口类
{
public :
	virtual void play() = 0;
};
//TV01表示支持VGA接口的投影仪
class TV01 :public VGA 
{
public:
	void play()
	{
		std::cout << "通过VGA接口连接投影仪,进行视频播放" << std::endl;
	}
};

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

/*
方法1:换一个支持HDMI接口的电脑,这个叫代码重构(有重构成本代价,现实生活场景换电脑的成本也很大)
方法2:买一个转换头(适配器),能够把VGA信号转成HDMI信号.这个叫添加适配器类
*/
//进了一批新的投影以,但是新的投影仪都是只支持HDMI接口
class HDMI
{
public:
	virtual void play() = 0;
};
class TV02 :public HDMI
{
public:
	void play()
	{
		std::cout << "通过HDMI接口连接投影仪,进行视频播放" << std::endl;
	}
};
//由于电脑(VGA)和投影仪(HDMI接口)无法直接连接,所以需要添加适配器类
class VGAToHMDIAdapter :public VGA
{
public:
	VGAToHMDIAdapter(HDMI* p) :pHdmi(p) {
		std::cout << "这是转换头(适配器),能够把VGA信号转成HDMI信号.这个叫添加适配器类" << std::endl;
	}
	void play()//该方法相当于就是转换头,做不同接口的信号转换的。
	{		
		pHdmi->play();
	}

private:
	HDMI* pHdmi;
};
int main()
{
	Computer computer;
	//computer.playVideo(new TV01())
    //computer.playVideo(new TV02());
	computer.playVideo(new VGAToHMDIAdapter(new TV02()));
	return 0;
}
输出结果如下:
```cmd
这是转换头(适配器),能够把VGA信号转成HDMI信号.这个叫添加适配器类
通过HDMI接口连接投影仪,进行视频播放
posted @ 2025-11-07 21:00  焦涛  阅读(4)  评论(0)    收藏  举报