定義:組合模式(composite),將物件組合成樹形結構以表示「部分-整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。【dp】
uml類圖:
原始碼實現:
// composite.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include #include #include #include using namespace std;
//composite介面的抽象類
class component
virtual void add(component *c) = 0;
virtual void remove(component *c) = 0;
virtual void display(int d) = 0;
};//帶有子節點的節點
class composite : public component
void add(component *c)
void remove(component *c)
//列印節點名及子節點名
void display(int d)
cout << name << endl;
auto it = children.cbegin();
for (; it != children.cend(); ++it)
}};//葉子節點
class leaf : public component
void add(component *c)
void remove(component *c)
void display(int d)
cout << name << endl;
}};int _tmain(int argc, _tchar* argv)
輸出:
為了更直觀一些,上面實現了這樣一套類結構:
可見就是通過這個設計模式構造了乙個樹形結構,很形象就稱作組合模式啦。。。
使用場景和優勢:
1.需求中是體現部分與整體層次的結構時,希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮使用組合模式了。
上點的關鍵就是,統一地使用,這就是面向結構程式設計,像組合模式**中的composite和leaf類一樣,composite包含多個物件,leaf只是單個物件,但我們在外面可以統一呼叫display,add,remove介面,也許有人會問,leaf物件不能在增加和刪除了,但是我們採用輸出異常資訊的方法,這樣保持了介面的一致性,這被稱作「透明方式」。
優勢:組合模式的基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,這樣不斷地遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了;
使用者是不用關心到底是處理乙個葉節點還是處理乙個組合元件,也就用不著為定義組合而寫一些選擇判斷語句了。
總之,就是為了讓客戶可以一致地使用組合結構和單個物件。
十五 組合模式
組合模式 composite 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。ifndef composite h define composite h include include include using namespace std...
組合模式 設計模式 組合模式
1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...
設計模式 組合模式 組合模式使用
目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...