1. 程式人生 > >設計模式之橋接模式(Bridge)

設計模式之橋接模式(Bridge)

out ima img 例子 視圖 存在 關系 第一條 用法

橋接模式屬於先天模式,這裏的先天模式就是說一開始就要把結構搭建好,方便後來的擴展,而不是對已經出現的模塊和接口進行改進擴展的。橋接的核心在於實體類和操作類之間的聚合關系,這個聚合關系就是我們所說的"橋",不同於裝飾、代理和適配器模式的中的聚合關系,橋接不存在兩者之間的繼承關系,操作類是完全解耦的,而實體類對於操作類也只是弱耦合。

作用

將抽象部份與它的實現部份分離,使它們都可以獨立地變化。

類視圖

技術分享圖片

實現

//操作類
class action
{
public:
    virtual void do()=0;
};

class write : public action
{
public:
     void do(){ count << "to write\n";}
};

class draw : public action
{
public:
    void do() { count << "to draw\n";}
};

class gift : public action
{
public:
    void do {count << "to gift\n";}
};

//實體類
class pen
{
public:
    pen(): m_pAction(NULL){}
    virtual ~pen(){ delete m_pAction;}
    virtual void use();
    void setaction(action* pAction){m_pAction = pAction;}
protected:
    action* m_pAction;
};

class pencil : public pen
{
    void use()
    { 
        cout << "use pencil ";
        m_pAction.do(); 
    }
};

class brush : public pen
{
    void use()
    { 
        cout << "use brush ";
        m_pAction.do(); 
    }
};

class goldenpen : public pen
{
    void use()
    { 
        cout << "use goldenpen ";
        m_pAction.do(); 
    }
};

int main
{
    ballpen inHand;
    inHand.setaction(new gift());
    inHand.use();
}

技術分享圖片

上面例子簡單的說明了實體類pen和操作類action之間的橋接關系,如果需要擴展的情況下,我們可以分別對pen和action進行繼承擴展,不會牽扯到另外一邊的改動。比如我們再擴展一種筆或者一種筆的用法,直接擴展筆的種類或者用法的種類即可,這樣就達到了低耦合易擴展的目的。

應用場景

  1. 當對象存在多種變化的因素時,考慮對其變化的因素和場景進行抽象,然後進行橋接;如筆擁有不同的功能。
  2. 當多個對象存在多種變化的因素時,考慮將這部分變化的部分抽象出來再聚合進來;比如不同品牌的電腦安裝不同的系統、使用不同的軟件等,相當於將第一條進行橫向擴展,增加橋接的數量。

設計模式之橋接模式(Bridge)