设计模式3:适配器模式
作者:
jokerlove
,
2022-09-16 02:05:52
,
所有人可见
,
阅读 214
适配器模式:让不兼容的接口可以在一起工作
假设现在有两套配置:
父类VGA接口,子类vga线连接VGA接口;父类HDMI接口,子类hdmi线连接HDMI接口
显然二者的子类都是不能调用对方父类的
如果此时我有一台只支持VGA接口的电脑,但我就是想用HDMI接口连接,此时只有两个办法:
1 更换一个支持HDMI的电脑(等于创建一个继承HDMI的子类电脑),代码重构太麻烦
2 使用一个转接头,将hdmi线转换为VGA线,就可以正常插入VGA接口了
适配器模式就是干了2这样一件事情
class VGA
{
public:
virtual void play() = 0;
};
class vgaCable :public VGA // VGA线材只能连接VGA接口
{
public:
void play() { cout << "通过VGA接口进行显示" << endl; }
};
class HDMI
{
public:
virtual void play() = 0;
};
class hdmiCable :public HDMI // hdmi线材只能连接HDMI接口
{
public:
void play() { cout << "通过HDMI接口进行显示" << endl; }
};
class Computer // 此时有一个外部设备,只支持VGA接口(只能传入VGA对象)
{
public:
void playVideo(VGA* pVGA) { pVGA->play(); }
};
class VGAtoHDMI :public VGA // 适配器将VGA类型转换为HDMI类型
{
private:
HDMI* _h; // 可以适配的原因是我内部就有一个HDMI接口(注意不是hdmi线,而是抽象类)
public:
VGAtoHDMI(HDMI* h) :_h(h) {}
void play() { _h->play(); } // 这里就调用了HDMI的显示方法
};
int main()
{
Computer comp;
comp.playVideo(new vgaCable()); // 使用vga线连接VGA接口,显然是可以正常显示的
//comp.playVideo(new hdmiCable()); // 直接插hdmi线肯定是不可以的
comp.playVideo(new VGAtoHDMI(new hdmiCable));
// 但是使用转接头对hdmi线进行转接就可以使用VGA接口辣
return 0;
}