組合模式:允許你講物件組合成樹形結構來表現「整體/部分」層次結構。組合能讓客戶以一致的方式處理個別物件以及物件組合。
在上一節我們講述了迭代器模式,這節我們講述的是組合模式,通常組合模式和迭代器模式共用才會達到比較好的效果,接下來我們還是拿上一節講述的場景,在上個場景中,如果晚餐店的選單中有甜點這個子餐單,旗下有自己的子選單項,那麼迭代器模式的作用就不怎麼明顯了,融合後的選單就是樹形結構的樣子,如何能更合理的設計呢,下面我們就看看組合模式起到的神奇效果吧。
首先分清幾個概念:元件(這裡是選單、選單項)、組合(這裡是選單)、樹。 組合包含元件,元件有兩種:組合與葉子節點(選單項)。這就說明組合下可以有其他組合或者也節點。用這些方式組成的資料最後得到樹形結構。下面直接看**來理解理解
首先建立乙個元件的介面
//接著我們來實現具體的元件選單和選單項選單元件,所有的元件都必須實現這個介面,因為葉節點和組合節點的角色不同,所有我們這裡就丟擲異常,讓子類去實現自身的方法。
public
abstract
class
menucomponent
public
void
remove(menucomponent menucomponent)
public menucomponent getchild(int
i)
public
void
print()
}
//當然,不能忘記服務員啦選單元件中的選單,必須實現選單元件的介面menucomponent
public
class menu extends
menucomponent
//我們這裡將選單項和子選單加入到選單中,你看,因為選單項和選單都是menucomponent,所以我們只需要乙個方法就可以兩者兼顧了。
public
void
add(menucomponent menucomponent)
public
void
remove(menucomponent menucomponent)
public menucomponent getchild(int
i)
public
void
print()
}}//
選單元件中的選單項,必須實現選單元件的介面menucomponent
public
class menuitem extends
menucomponent
//列印的是選單項的資訊
public
void
print()
}
//最後我們來進行測試下服務員類,可以看出**變得簡潔多了
public
class
waitress
public
void
printallmenu()
}
public執行的結果如下:class
test
}
好了這就是利用組合模式生成的選單樹了。下面總結下某些設計模式的區別,以免搞混
介面卡:改變乙個或多各類的介面
策略:封裝可互換的行為,並使用委託覺得使用哪乙個
迭代器:提供乙個方式來遍歷集合,而無需暴露集合的實現
外觀:簡化一群類的介面
組合:客戶可以將物件的集合以及個別物件一視同仁
觀察者:當某個狀態改變時,允許一群物件能被通知到
下一節:狀態模式
組合模式 設計模式 組合模式
1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...
設計模式 組合模式 組合模式使用
目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...
設計模式 組合設計模式
組合模式 composite pattern 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...