學習筆記 設計模式 9 組合模式

2021-07-29 19:44:41 字數 1260 閱讀 9819

在上乙個設計模式中,我們講到了組合模式的例子。在那個例子中,我們利用迭代器將餐廳的選單(類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 而枝幹是可以繼續向下延伸的...