|
bridge模式最大的好处就是接口与实现相分离,但是这同样带来了弊端,因为接口与实现通过某个中介捆绑在一起所以变得不灵活,当有一个接口需要改动时实现类也必须相应的改动。下面是个简单的bridge模式的例子,代码是本人原创,本想花点时间改改,做一个游戏相关的小例子 因为能力和时间的双重原因最终导致放弃。
代码应该分布到不同的模块中去 在这里我直接罗列出来了
//IElectricalEquipment.h 部分
#include <iostream>
using namespace std;
class IElectricalEquipment
{
public:
IElectricalEquipment(void){};
~IElectricalEquipment(void){};
virtual void On() = 0;
virtual void Off() = 0;
};
//cFan.h部分
#include "ielectricalequipment.h"
class cFan :
public IElectricalEquipment
{
public:
cFan(void){};
~cFan(void){};
void On() { cout<< "fan is on" << endl;};
void Off(){ cout<< "fan is off" << endl;};
};
//cLight.h部分
#include "ielectricalequipment.h"
class cLight :
public IElectricalEquipment
{
public:
cLight(void){};
~cLight(void){};
void On() { cout<< "light is on" << endl;};
void Off(){ cout<< "light is off" << endl;};
};
以上3个类的声明是以接口类IElectricalEquipment为基类的bridge模式实现部分的代码 也就是他们负责bridge模式实现部分的功能
下面开始简单用几个类声明完善bridge模式的接口部分
//cSwitch 部分
#pragma once
#include "IElectricalEquipment.h"
class cSwitch
{
public:
cSwitch(void){};
~cSwitch(void){};
void On(){ m_pEquipmemt->On();}
void Off(){ m_pEquipmemt->Off();}
void SetEquipment( IElectricalEquipment* pEquipment)
{
m_pEquipmemt = pEquipment;
}
protected:
IElectricalEquipment* m_pEquipmemt;
};
//cNormalSwitch.h部分
#include "cswitch.h"
class cNormalSwitch :
public cSwitch
{
public:
cNormalSwitch(void){};
~cNormalSwitch(void){};
};
//cFancySwitch .h部分
#pragma once
#include "cswitch.h"
class cFancySwitch :
public cSwitch
{
public:
cFancySwitch(void){};
~cFancySwitch(void){};
};
//main.cpp部分
#include "cFan.h"
#include "cFancySwitch.h"
#include "cLight.h"
#include "cNormalSwitch.h"
#include "cSwitch.h"
#include "IElectricalEquipment.h"
int main()
{
IElectricalEquipment* pLight = new cLight();
IElectricalEquipment* pFan = new cFan();
cFancySwitch fancySwitch;
fancySwitch.SetEquipment( pFan);
fancySwitch.On();
cNormalSwitch normalSwitch;
normalSwitch.SetEquipment( pLight);
normalSwitch.On();
return 0;
}
例子比较简单 但是基本表达了bridge模式的意图 即接口与实现相分离 希望大家喜欢
|
|