案例分析:
一个普通的开关控制的电灯、电风扇等等,都是桥接的例子。开关的目的是将设备打开或关闭。实际的开关可以是简单的双刀拉链开关,也可以是调光开关。
意图:
桥接模式将抽象部分与它的实现分离,使它们能够独立地变化。案例中开关控制的对象和具体开关的类型都是可能变化的,本程序就将它们封装,具体的实现在起各自的派生类中完成。
结构图:
程序代码:
#include <iostream.h>
//主要目的是为了将实现和抽象分离
//以下的类为实现部分,用来将实现分离出来
class KaiGuan
{
public:
virtual void open()=0;
virtual void close()=0;
};
class ShuanDaoKaiGuan: public KaiGuan
{
public:
ShuanDaoKaiGuan()
{
cout<<"双刀开关!"<<endl;
}
void open()
{
cout<<"打开!"<<endl;
}
void close()
{
cout<<"关闭!"<<endl;
}
};
class DiaoGuangKaiGuan: public KaiGuan
{
public:
DiaoGuangKaiGuan()
{
cout<<"调光开关!"<<endl;
}
void open()
{
cout<<"调节!"<<endl;
}
void close()
{
cout<<"关闭!"<<endl;
}
};
//以下的类为抽象部分,通过引用实现的指针来为客户端提供接口
class QJKG
{
public:
KaiGuan *kgobj;
public:
virtual void open()=0;
virtual void close()=0;
};
class QiaoJieKG: public QJKG
{
public:
QiaoJieKG(KaiGuan* obj)
{
kgobj=obj;
}
void open()
{
kgobj->open();
}
void close()
{
kgobj->close();
}
};
//桥接模式的结构分成三部分
//1.Client 也就是下面的主函数
//2.Implementor 也就是上面的三个类(KaiGuan, ShuanDaoKaiGuan, DiaoGuangKaiGuan)
//3.Abstraction 也就是上面的两个类(QJKG, QiaoJieKG)
//这样做的结果就是当实现改变时,客户端并不需要做任何的改变
int main()
{
QiaoJieKG *obj=new QiaoJieKG(new ShuanDaoKaiGuan);
obj->open();
obj->close();
obj=new QiaoJieKG(new DiaoGuangKaiGuan);
obj->open();
obj->close();
return 1;
}
运行结果:
双刀开关!
打开!
关闭!
调光开关!
调节!
关闭!
Press any key to continue