结构型模式3——适配器模式

适配器模式用于解决软件系统中接口不兼容问题,通过创建适配器类桥接两个不兼容接口,使得原有对象能在新环境中正常工作。例如,当电脑只有VGA接口,但新投影仪只支持HDMI接口时,使用适配器可以将VGA接口的电脑与HDMI接口的投影仪连接起来,实现视频播放。适配器模式避免了因接口不匹配而更换设备的成本,体现了代码的灵活性和复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适配器模式(Adapter Pattern)

适配器模式是作为两个不兼容的接口之间的桥梁增加一个适配器类使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

主要解决的问题:
主要解决在软件系统中,常常要将一些“现存的对象”放到新环境中,而新环境的接口是现有对象不能满足的。

我们用下面的情境来解释一下适配器模式:
我们用电脑投影到投影仪上时,投影仪Project有VAGHDMI以及Type-C等多种接口

在前几年,投影仪和电脑的接口都是VAG,无疑,直接连接就可:

代码实现如下:

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

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

//电脑:只支持VGA接口
class LenovoComputer
{
public:
	void PlayMovie(VGA* pVGA)
	//由于该电脑只支持VGA接口,所以该方法的参数也只能支持VGA接口的指针/引用
	{
		pVGA->play();
	}
};

int main()
{
	LenovoComputer computer;
	computer.PlayMovie(new TV01());
}

随着技术的发展,有了新的接口,和原来的电脑不适配了,我们也许会买新的,但是你得有钱,买新电脑就是代码重构。

对于我们这些穷人来说,买个转接口是最好的方法,适配器通过继承自原有的接口,调动内部所存在新接口的方法,然后提供给电脑一个原有的接口!

//新投影仪 只支持HDMI接口
class HDMI
{
public:
	virtual void play() = 0;
	string getType() const { return "HDMI"; }
};
//投影仪
class TV02 :public HDMI
{
public:
	void play() { cout << "通过HDMI接口连接投影仪,进行视频播放" << endl; }
};

//由于电脑(VGA接口)和投影仪(HDMI接口)无法直接相联,所以需要添加适配器类
class VGAToHDMIAdapter :public VGA//必须继承老接口,继承新接口与否视情况而定
{
public:
	VGAToHDMIAdapter(HDMI* p) :pHDMI_(p) {}

	void play()//该方法就是转换头,做不同接口的信号转换
	{
		pHDMI_->play();
	}
private:
	HDMI* pHDMI_;
};

int main()
{
	LenovoComputer computer;
	computer.PlayMovie(new VGAToHDMIAdapter(new TV02()));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值