适配器模式的主要目的,是让不兼容的接口可以在一起工作,当我们自己的项目接口与一些第三方库的接口不兼容的时候,就需要用到适配器,或者我们自己重构自己的代码,显然后者的代价比较大。
假如,我们有一种电脑,这个电脑只支持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;
};