是將物件組合成樹形結構以表示『部分-整體』的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。組合是物件的集合,而其中的任何乙個物件又可能是乙個組合,或者是乙個簡單的物件。在樹形結構中,訪問組合中所有的物件要求有乙個簡單的單一訪問介面,但同時要求能夠區分開節點和葉子。在構造組合的時候,我們需要決定哪個節點是元素哪個是葉子。在這裡我們可以通過子節點個數進行判斷是不是葉子節點。
比如說乙個公司,裡邊有經理,經理下邊有部門經理,部門經理下邊有小組負責人,小組負責人下邊有員工,這裡可以將這些人分為兩類,一類是雇員類(葉子節點),一類是老闆類(有子節點)。這裡的葉子節點下面是沒有分支的,而子節點則相當於樹枝,下面有子節點,即屬於不同的層次的管理人員,這樣是明顯的組合-整體結構。通過舉例我們介紹一下組合模式結構圖。
例子:
static void main(string args)
//公司類 抽象類或介面
abstract class company
public abstract void add(company c);//增加
public abstract void remove(company c);//移除
public abstract void display(int depth);//顯示
public abstract void lineofduty();//履行職責:不同部門需履行不同的職責
}//具體公司類 實現介面 樹枝節點
class concretecompany:company
public override void add(company c)
public override void remove(company c)
public override void display(int depth)
}//履行職責
public override void lineofduty()}}
//人力資源部與財務部類 樹葉節點
//人力資源部
class hrdepartment : company
public override void add(company c)
public override void remove(company c)
public override void display(int depth)
public override void lineofduty()
員工招聘培訓管理", name);}}
//財務部
class financedepartment:company
public override void add(company c)
public override void remove(company c)
public override void lineofduty()
公司財務收支管理", name);
}public override void display(int depth)
}
當發現需求中是體現部分與整體層次結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮組合模式了 設計模式C 實現 整體 部分設計模式
整體 部分設計模式有助於聚合元件形成一種語義單元。一種聚合元件 整體 封裝其構成元件 部分 組織它們之間的協作,並為其功能提供乙個公共介面。直接訪問乙個部分是不可能的。例子 示例 include using namespace std class wheel int main void 執行結果 整...
組合模式 針對於「部分 整體」層次結構的設計模式
組合模式又稱合成模式,是用來描述部分與整體關係的一種設計模式。它的定義是 將物件組合成樹形結構以表示 部分 整體 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。組合模式中的幾個角色 1 component抽象構件 定義參加組合物件的共有方法和屬性,可以定義一些預設的行為或屬性。2 le...
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...