組合多個物件形成樹形結構以表示「部分-整體」的結構層次。組合模式對單個物件(葉子物件)和組合物件(容器物件)的使用具有一致性。
舉例:假設你要開一家公司,要招募大量員工,當然有經理,主管,普通員工,相信再小的公司都會有這樣的組織架構。經理管主管,主管又管普通員工,普通員工自己管自己
#include
#include
#include
using
namespace std;
//員工:抽象物件component
class
employee
virtual
void
add(employee* subordinate)=0
;virtual
void
remove
(employee*subordinate)=0
;virtual
void
showme()
=0;}
;//設計員
class
designer
:public employee
void
add(employee* subordinate) override
void
remove
(employee*subordinate)override
void
showme
()override }
;//主管或經理:枝節點實現
class
manger
:public employee
void
add(employee* subordinate) override
void
remove
(employee* subordinate) override
it++;}
}//顯示自己及手下
優點:利用多型和遞迴機制更方便地使用複雜樹結構。
缺點:對於功能差異較大的類, 提供公共介面或許會有困難。 在特定情況下, 你需要過度一般化元件介面, 使其變得令人難以理解。
需要實現樹狀物件結構, 可以使用組合模式
橋接模式、 狀態模式和策略模式 (在某種程度上包括介面卡模式) 模式的介面非常相似。 實際上, 它們都基於組合模式——即將工作委派給其他物件, 不過也各自解決了不同的問題。 模式並不只是以特定方式組織**的配方, 你還可以使用它們來和其他開發者討論模式所解決的問題。
你可以在建立複雜組合樹時使用生成器模式, 因為這可使其構造步驟以遞迴的方式執行。
責任鏈模式通常和組合模式結合使用。 在這種情況下, 葉元件接收到請求後, 可以將請求沿包含全體父元件的鏈一直傳遞至物件樹的底部。
你可以使用迭代器模式來遍歷組合樹。
你可以使用訪問者模式對整個組合樹執行操作。
你可以使用享元模式實現組合樹的共享葉節點以節省記憶體。
組合和裝飾模式的結構圖很相似, 因為兩者都依賴遞迴組合來組織無限數量的物件。
裝飾類似於組合, 但其只有乙個子元件。 此外還有乙個明顯不同: 裝飾為被封裝物件新增了額外的職責, 組合僅對其子節點的結果進行了 「求和」。
但是, 模式也可以相互合作: 你可以使用裝飾來擴充套件組合樹中特定物件的行為。
大量使用組合和裝飾的設計通常可從對於原型模式的使用中獲益。 你可以通過該模式來複製複雜結構, 而非從零開始重新構造。
1.2.
3.
C 設計模式 組合模式
一.概述 組合模式,將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。結構 1.component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。2.leaf 在組合...
C 設計模式 組合模式
一 組合模式的定義 組合多個物件形成樹形結構以表示具有部分 整體關係的層次結構。二 說明 組合模式關注那些包含葉子構件和容器構件的結構以及它們的組織形式,在葉子結構中不包含成員物件,而容器構件中包含成員物件,這些物件通過遞迴組合可構成乙個樹形結構。由於容器物件和葉子物件在功能上存在區別,因此在使用這...
C 設計模式 組合模式
ifndef composite h define composite h include include include 說明 組合模式的關鍵是定義了乙個抽象構件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構件類進行程式設計,無須知道它到底表示的是葉子還是容器,可以對其進行統一處理。同...