設計模式《九》——橋接模式

簡介    

       橋接模式就是把事物和其具體實現分開,使他們可以各自獨立的變化。橋接的用意是:將抽象化與實現化解耦,使得二者可以獨立變化,像我們常用的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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章