將物件組合成樹形結構以表示『部分-整體』的層次結構。組合模式使得使用者對單個物件好人組合物件的使用具有一致性。
//component為組合中的物件宣告介面,在適當情況下,實現所有類共有介面的預設行為。
//宣告乙個藉口用於訪問和管理component的子部件
abstractclass component
//使用add和remove來提供增加或刪除樹葉或樹枝的功能
public abstract void add(component c);
public abstract void remove(component c);
public abstract void display(int depth);};
//leaf在組合中表示葉節點物件,葉節點沒有子節點
class leaf:component
public override void add(component c)
public override void remove(component c)
public override void display(int depth)
}; //枝節點,儲存子部件
class composite : component
public override void add(component c)
public abstract void remove(component c)
public abstract void display(int depth)
}};
//客戶端
void main()
執行結果如下:
在葉節點中實現add和remove功能是沒有意義的,我們可以在component中去除這兩個功能,而在composite中單獨新增這兩個功能,這叫安全模式,當然這樣子有好也有不好的地方。
何時使用?
當你發現需求中是體現部分與整體層次的結構時候,以及你希望使用者可以忽略組合物件與單個物件的不同,統一的使用組合結構中的所有物件時。
下面,給出乙個具體的例子,關於總公司、公司部分、分公司的公司管理系統:
public abstract void duty(company c); //職責};
class concretcompany : company
public abstract void add(company c)
public abstract void remove(company c)
public abstract void display(int depth)
}public abstract void duty(company c)
}};
//人力資源部
class hrdep :company
public abstract void add(company c)
{}public abstract void remove(company c)
{}public abstract void display(int depth)
public abstract void duty(company c)
招聘", name);
}};
//其他部門
class otdep :company
public abstract void add(company c)
{}public abstract void remove(company c)
{}public abstract void display(int depth)
public abstract void duty(company c)
其他", name);
}};
void main()
組合模式這樣就定義了包含公司的部門和分公司。
基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,不斷遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了
讓客戶可以一致的使用組合結構和單個物件
大話設計模式 組合模式
abstract class component public abstract function add component c public abstract function remove component c public abstract function display depth 葉...
大話設計模式 組合模式
前言 在 軟體開發過程中,我們經常會遇到處理簡單物件和復合物件的情況,例如對作業系統中目錄的處理就是這樣的乙個例子,因為目錄可以包括單獨的檔案,也可以包括 資料夾,資料夾又是由檔案組成的,由於簡單物件和復合物件在功能上區別,導致在操作過程中必須區分簡單物件和復合物件,這樣就會導致客戶呼叫帶來不必要的...
大話設計模式 組合模式
一 組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。二 示例 data public abstract class company public abstract void add company c public abstrac...