天天看點

設計模式《九》——橋接模式簡介     角色與職責實作

簡介    

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

繼續閱讀