C++设计模式6:适配器模式

适配器模式的主要目的,是让不兼容的接口可以在一起工作,当我们自己的项目接口与一些第三方库的接口不兼容的时候,就需要用到适配器,或者我们自己重构自己的代码,显然后者的代价比较大。

假如,我们有一种电脑,这个电脑只支持VGA接口,那么它自然而然可以和支持VGA的投影仪一起使用。

cpp 复制代码
#include<iostream>
using namespace std;
class VGA
{
public:
	VGA() {}
	~VGA() {}
	virtual void  play() = 0;
};
class Type5
{
public:
	Type5() {}
	~Type5() {}
	virtual void  play() = 0;
};
class Computer//只支持VGA接口的电脑
{
public:
	Computer() {}
	~Computer() {}
	void playVideo(VGA *vga)
	{
		vga->play();
	}
};
class Video1:public VGA
{
public:
	Video1() {}
	~Video1() {}
	void play()
	{
		cout << "play with VGA" << endl;
	}
};
class Video2 :public Type5
{
public:
	Video2() {}
	~Video2() {}
	void play()
	{
		cout << "play with Type5" << endl;
	}
};
int main()
{
	Computer computer;
	computer.playVideo(new Video1());
	return 0;
}

那对于支持Type5的投影仪,这台电脑,岂不是不能使用了?

要解决这个问题,非常简单,只需要加一个转换头就可以了,这个转换头就是我们的适配器。

cpp 复制代码
class VGAToType5Adapter:public VGA
{
public:
	VGAToType5Adapter(Video2* video2) :myvideo(video2)
	{

	}
	~VGAToType5Adapter()
	{
		delete myvideo;
	}
	void play()
	{
		myvideo->play();
	}
private:
	Video2* myvideo;
};
相关推荐
序属秋秋秋1 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
ruan1145142 小时前
MySQL4种隔离级别
java·开发语言·mysql
quant_19863 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
Hellyc6 小时前
基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
java·数据库·设计模式·rocketmq
啟明起鸣6 小时前
【网络编程】简易的 p2p 模型,实现两台虚拟机之间的简单点对点通信,并以小见大观察 TCP 协议的具体运行
c语言·网络·tcp/ip·p2p
追烽少年x6 小时前
设计模式---观察者模式(发布-订阅模式)
网络·设计模式
秋田君6 小时前
深入理解JavaScript设计模式之命令模式
javascript·设计模式·命令模式
花好月圆春祺夏安6 小时前
基于odoo17的设计模式详解---享元模式
设计模式·享元模式
百锦再7 小时前
详细解析 .NET 依赖注入的三种生命周期模式
java·开发语言·.net·di·注入·模式·依赖
风吹落叶花飘荡7 小时前
2025 Next.js项目提前编译并在服务器
服务器·开发语言·javascript