在上乙個設計模式中,我們講到了組合模式的例子。在那個例子中,我們利用迭代器將餐廳的選單(類a 類b)進行了改造,使其可以通用地進行列舉操作,現在我們的餐廳又遇到了乙個新的問題,在原來的選單中,老闆要求加上新的選單,而新的選單不是與原來的選單是並列的關係,而是包含的關係!新增的選單是原來選單的子項。可能你已經想到了要用樹結構來處理這個需求了,那麼我們就來看一下設計模式中的樹結構-組合模式。
先來介紹組合模式的定義:
組合模式允許你將物件組合成樹形結構來表現」整體/部分」層次結構。組合能讓客戶以一致的方式處理個別物件以及物件組合。
可能這個定義比較抽象,我們用實際的例子來介紹這個設計模式。
根據我們從資料結構上學習到的樹結構,樹的大致結構如下:
組合模式就是讓我們利用樹形的結構建立物件,使用組合結構(樹形結構),我們能夠把相同的操作應用到每個節點上,也就是說,在大多數情況下,我們可以忽略各個節點之間的區別。
還記得我們是如何實現樹結構的嘛,在整個樹結構中,只有乙個節點物件,並沒有根節點、子節點、葉節點的區分。
樹結構也有其自己的遍歷方法(先序遍歷,後序遍歷等等),這與我們的上乙個迭代器模式似乎有近似的樣子,那麼我們來看一下,組合模式是如何解決老闆的新需求的。
首先,我們要把之前的選單物件進行改造,讓他可以有子選單:
class menucomponent
public menucomponent getchild(int i)
public
void
printmenu()
}public listgetmenucomponents()
public
void
setmenucomponents(listmenucomponents)
public string getname()
public
void
setname(string name)
}
然後我們在需要使用選單的時候就需要這麼做:
public
static
void
main(string args)
這樣就可以列印出所有的選單項了。
本模式的類圖與資料結構中的樹形結構圖相似,在此省略
了解設計模式 9組合模式
1.場景 把部分和整體的關係用樹形結構來表示,從而使客戶端可以使用統一的方式處理部分物件和整體物件。2.組合模式核心 1 抽象構件 component 角色 定義了葉子和容器構件的共同點 2 葉子 leaf 構件角色 無子節點 3 容器 composite 構件角色 有容器特徵,可以包含子節點 3....
設計模式8 組合模式
組合模式首先想到的就是樹形結構,比如我們常用的檔案結構,請看windows的檔案結構 無論是檔案或者是資料夾,常用操作都是一致的,比如 複製 貼上 剪下 刪除 所佔空間大小。我們並沒有刻意的去分他是資料夾還是檔案。我們可以把資料夾看成是組合物件,把每乙個檔案看成是單個物件。組合模式模糊了這兩個概念,...
《設計模式12 組合模式
組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。組合模式的結構就如同樹狀圖一樣。而樹就是枝幹 葉子的組合,組合模式可以形象的這麼理解。其實資料夾是乙個很好的組合模式的體現。乙個資料夾 樹根root 下可能有多個資料夾 枝幹trunk 可能是單個的檔案 樹葉leaf 而枝幹是可以繼續向下延伸的...