适配器模式

适配器模式其实主要就是在原有接口和现有接口不匹配的情况下去增加一个适配器类,匹配两种不同的接口。

比如说:投影仪Project有VAG和HDMI以及Type-C等多种接口,在前些年,投影仪和电脑的接口都是VAG,无疑,直接连接就可:

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

//投影仪
class Project :public VGA
{
   
public:
	void play() {
    cout << "play the movie by VGA" << endl; }
};

//电脑
class MsiComputer
{
   
public:
	void PlayMovie(VGA* pVGA)
	{
   
		pVGA->play();
	}
};

int main()
{
   
	MsiComputer computer;
	computer.PlayMovie(new Project());
}

但是,随着技术的发展,有了新的接口,和原来的电脑不适配了,咋整。买新的呗!对,买新的是一种好方法,但是你得有钱,买新电脑就是重构,最好但是花时间。

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

//新投影仪 只支持HDMI接口
class HDMI
{
   
public:
	virtual void play() = 0;
	string getType() const {
    return "VGA"; }
};
//投影仪
class NewProject :public HDMI
{
   
public:
	void play() {
    cout << "play the movie by HDMI" << endl; }
};

class VGAToHDMIAdapter :public VGA
{
   
public:
	VGAToHDMIAdapter(HDMI* p) :pHDMI_(p) {
   }

	void play()
	{
   
		pHDMI_->play();
	}
private:
	HDMI* pHDMI_;
};

int main()
{
   
	MsiComputer computer;
	computer.PlayMovie(new VGAToHDMIAdapter(new NewProject()));
}

参考文献

[1] 施磊.C++高级.图论科技.2020.7.