天天看点

设计模式《九》——桥接模式简介     角色与职责实现

简介    

       桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。

角色与职责

设计模式《九》——桥接模式简介     角色与职责实现

Clinet:

Bridge模式的使用者。

CAbstraction:

抽象类接口,维护对行为实现(Implementor)的引用。

RefinedAbstraction

CAbstraction的子类。

implementor:

行为实现类接口(CAstraction接口定义了基于Implementor接口的更高层的操作,如车与发动机的关系,CAstraction对于车,Implementor对应发动机)。

ConcreteImplementor

Implementor的子类。

使用场景:

实现系统可能有多个角度分类,每一种角度都可能变化。即多对多关系中。

实现

#include <iostream>
#include <string>
using namespace std;
class Engine {
public:
    virtual void installEngine() = 0;
};
class Engine1100c : public Engine {
public:
    virtual void installEngine() {
        cout << "I'm 1100c Engine, wellcome to use" << endl;
    }
};
class Engine4400c : public Engine {
public:
    virtual void installEngine() {
        cout << "I'm 4400c Engine, wellcome to use" << endl;
    }
};
class Car {
public:
    Car(Engine* engine) :m_engine(engine) {}
    virtual void installEngine() = 0;
protected:
    Engine* m_engine;
};
class BWM5 : public Car{
public:
    BWM5(Engine* engine) : Car(engine) { }
    virtual void installEngine() {
        cout << "I'm BWM5" << endl;
        m_engine->installEngine();
    }
};
class BWM7 : public Car {
public:
    BWM7(Engine* engine) : Car(engine) { }
    virtual void installEngine() {
        cout << "I'm BWM7" << endl;
        m_engine->installEngine();
    }
};
int main(int argc, char* argv[]) {
    Engine* engine = NULL; 
    Car* car = NULL;
    engine = new Engine1100c;
    car = new BWM5(engine);
    car->installEngine();
    delete engine;
    delete car;
    engine = new Engine4400c;
    car = new BWM7(engine);
    car->installEngine();
    cin.get();
    return 0;
}
           

继续阅读