組合模式,將物件組合成屬性結構以表示『部分-整體』的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。其uml圖如下:
乙個組織有很多子組織,而無論子組織是單獨乙個部門或是乙個分組織。該組織都希望把它們當成一樣的子組織來管理。舉個例子吧,就拿公司來說吧,乙個公司總部為了方便管理希望把分公司當成乙個部門來管理就行了。比如公司要發獎金了,總公司只用通知自己的所有部門就可以了。對於分公司,只用通知分公司就可以了,而不用一一通知分公司的各個部門。具體的實現就是composite中有乙個自己子組織的列表,當有什麼通知要執行時,按順序通知列表中的子組織就行了。而如果子組織中有組織的話也時執行相同的操作,因為它們都實現了相同的介面。
示例**如下:
// compositemodel.h檔案
#pragma once
#include
#include
#include
#include
class
componentptr
virtual
void
add(componentptr * p)=0
;virtual
void
remove
(componentptr * p)=0
;virtual
void
display()
=0;}
;class
leafptr
:public componentptr
void
add(componentptr * p)
void
remove
(componentptr * p)
void
display()
};class
compositeptr
:public componentptr;~
compositeptr()
}void
add(componentptr * p));
if(it == m_vec.
end())
m_vec.
push_back
(std::shared_ptr
(p));}
void
remove
(componentptr * p));
if(it == m_vec.
end())
return
; m_vec.
erase
(it);}
void
display()}};
測試**如下:
#include
#include
"compositemodel.h"
intmain()
測試結果如下圖:
當你發現需求中是體現部分於整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,同意使用組合結構中的所有物件時,就應該考慮使用組合模式了。
C 設計模式之組合模式
組合模式,將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。在自然界中常常存在著許多樹形關係,例如公司的結構,有子公司,部門。又如檔案系統的結構,目錄下邊有目錄或者檔案,而目錄下的目錄又有目錄和檔案,如此遞迴下去。而組合模式就是為了處理這種樹...
c 設計模式之組合模式
組合模式的結構圖 兌現 include include include list using namespace std class ifile class file public ifile virtual void display private string m name 目錄節點 class...
C 設計模式之組合模式
拿大公尺時代來考慮這個問題是最合適不過的。將大公尺時代看作總公司,其他分校看成分公司,各個分公司都有自己的很多部門。英文 composite 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。拿咱們處在的大公尺時代舉例子。大公尺時代有計算機和...