Bridge 模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独
立性以及应对它们的功能扩展。
class Car
{
public:
virtual void installEngine() = 0;
};
class BMW5 : public Car
{
public:
virtual void installEngine()
{
cout << "BMW5 3500CC" << endl;
}
};
class BMW6 : public Car
{
public:
virtual void installEngine()
{
cout << "BMW6 4000CC" << endl;
}
};
class Jeep1X : public Car
{
public:
virtual void installEngine()
{
cout << "Jeep1X 1100CC" << endl;
}
};
class Jeep2X : public Car
{
public:
virtual void installEngine()
{
cout << "Jeep2X 1200CC" << endl;
}
};
//不同的车型,不同型号,安装不同类型的发动机,会引起子类的泛滥
//使用桥接模式解决问题
class Engine {
public:
virtual void installEngine() = 0;
};
class Engine4000 :public Engine {
public:
void installEngine() {
cout << "install Engine4000------------" << endl;
}
};
class Engine3500 :public Engine {
public:
void installEngine() {
cout << "install Engine3500------------" << endl;
}
};
class CarObj {
public:
CarObj(Engine* engine) {
m_engine = engine;
}
virtual void installEngine() = 0;
protected:
Engine* m_engine;
};
class BMW :public CarObj {
public:
BMW(Engine* p) :CarObj(p) {
}
void installEngine() {
cout << "BMW ";
m_engine->installEngine();
}
};
class Jeep :public CarObj {
public:
Jeep(Engine* p) :CarObj(p) {
}
void installEngine() {
cout << "Jeep ";
m_engine->installEngine();
}
};
int main() {
Engine4000* e4000 = new Engine4000;
BMW* bmw = new BMW(e4000);
bmw->installEngine();
delete bmw;
delete e4000;
system("pause");
return 0;
}