設計模式之橋接模式(Bridge)
阿新 • • 發佈:2018-03-28
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進行繼承擴展,不會牽扯到另外一邊的改動。比如我們再擴展一種筆或者一種筆的用法,直接擴展筆的種類或者用法的種類即可,這樣就達到了低耦合易擴展的目的。
應用場景
- 當對象存在多種變化的因素時,考慮對其變化的因素和場景進行抽象,然後進行橋接;如筆擁有不同的功能。
- 當多個對象存在多種變化的因素時,考慮將這部分變化的部分抽象出來再聚合進來;比如不同品牌的電腦安裝不同的系統、使用不同的軟件等,相當於將第一條進行橫向擴展,增加橋接的數量。
設計模式之橋接模式(Bridge)