樹形結構的處理——組合模式(五)
11.5 公司組織結構
在學習和使用組合模式時,Sunny軟體公司開發人員發現樹形結構其實隨處可見,例如Sunny公司的組織結構就是“一棵標準的樹”,如圖11-8所示:
圖11-8 Sunny公司組織結構圖
在Sunny軟體公司的內部辦公系統Sunny OA系統中,有一個與公司組織結構對應的樹形選單,行政人員可以給各級單位下發通知,這些單位可以是總公司的一個部門,也可以是一個分公司,還可以是分公司的一個部門。使用者只需要選擇一個根節點即可實現通知的下發操作,而無須關心具體的實現細節。這不正是組合模式的“特長”嗎?於是Sunny公司開發人員繪製瞭如圖11-9所示結構圖:
圖11-9 Sunny公司組織結構組合模式示意圖
在圖11-9中,“單位”充當了抽象構件角色,“公司”充當了容器構件角色,“研發部”、“財務部”和“人力資源部”充當了葉子構件角色。
|
11.6 組合模式總結
組合模式使用物件導向的思想來實現樹形結構的構建與處理,描述瞭如何將容器物件和葉子物件進行遞迴組合,實現簡單,靈活性好。由於在軟體開發中存在大量的樹形結構,因此組合模式是一種使用頻率較高的結構型設計模式,Java SE中的AWT和Swing包的設計就基於組合模式,在這些介面包中為使用者提供了大量的容器構件(如Container)和成員構件(如Checkbox、Button和TextComponent等),其結構如圖11-10所示:
圖11-10 AWT組合模式結構示意圖
在圖11-10中,Component類是抽象構件,Checkbox、Button和TextComponent是葉子構件,而Container是容器構件,在AWT中包含的葉子構件還有很多,因為篇幅限制沒有在圖中一一列出。在一個容器構件中可以包含葉子構件,也可以繼續包含容器構件,這些葉子構件和容器構件一起組成了複雜的GUI介面。
除此以外,在XML解析、組織結構樹處理、檔案系統設計等領域,組合模式都得到了廣泛應用。
1. 主要優點
組合模式的主要優點如下:
(1) 組合模式可以清楚地定義分層次的複雜物件,表示物件的全部或部分層次,它讓客戶端忽略了層次的差異,方便對整個層次結構進行控制。
(2) 客戶端可以一致地使用一個組合結構或其中單個物件,不必關心處理的是單個物件還是整個組合結構,簡化了客戶端程式碼。
(3) 在組合模式中增加新的容器構件和葉子構件都很方便,無須對現有類庫進行任何修改,符合“開閉原則”。
(4) 組合模式為樹形結構的物件導向實現提供了一種靈活的解決方案,通過葉子物件和容器物件的遞迴組合,可以形成複雜的樹形結構,但對樹形結構的控制卻非常簡單。
2. 主要缺點
組合模式的主要缺點如下:
在增加新構件時很難對容器中的構件型別進行限制。有時候我們希望一個容器中只能有某些特定型別的物件,例如在某個資料夾中只能包含文字檔案,使用組合模式時,不能依賴型別系統來施加這些約束,因為它們都來自於相同的抽象層,在這種情況下,必須通過在執行時進行型別檢查來實現,這個實現過程較為複雜。
3. 適用場景
在以下情況下可以考慮使用組合模式:
(1) 在具有整體和部分的層次結構中,希望通過一種方式忽略整體與部分的差異,客戶端可以一致地對待它們。
(2) 在一個使用面嚮物件語言開發的系統中需要處理一個樹形結構。
(3) 在一個系統中能夠分離出葉子物件和容器物件,而且它們的型別不固定,需要增加一些新的型別。
|
【作者:劉偉 http://blog.csdn.net/lovelion】
相關文章
- 樹形結構的處理——組合模式(四)模式
- 樹形結構的處理——組合模式(三)模式
- 樹形結構的處理——組合模式(二)模式
- 樹形結構的處理——組合模式(一)模式
- 設計模式系列之組合模式(Composite Pattern)——樹形結構的處理設計模式
- 樹形結構處理
- 設計模式學習筆記(十三)組合模式及其在樹形結構中的應用設計模式筆記
- 結構型-組合模式模式
- 組合模式-統一的處理個別物件與組合物件模式物件
- 淺談 JavaScript 處理樹形結構的幾個場景與方案JavaScript
- 樹形結構
- 8.結構型-組合模式模式
- 結構型之三-組合模式模式
- Vue 結合 D3js 產生的樹形結構。VueJS
- layui樹形結構UI
- java樹形結構Java
- 設計模式--組合模式Composite(結構型)設計模式
- 設計模式(十四、十五)----結構型模式之組合模式設計模式
- LayUI—tree樹形結構的使用UI
- 七、基本資料結構(樹形結構)資料結構
- JAVA設計模式(10):結構型-組合模式(Composite)Java設計模式
- 樹形結構資料儲存方案(五):區間巢狀巢狀
- 梳理公司的組織架構 — 組合模式架構模式
- 梳理公司的組織架構 --- 組合模式架構模式
- markdown樹形結構生成工具
- php tree類的使用(樹形結構)PHP
- [Swing]樹形結構的實現
- 一個簡單的樹形結構
- 樹形操作2-或、且關係組合
- 資料結構中樹形結構簡介資料結構
- 【設計模式自習室】結構型:組合模式 Composite設計模式
- 樹形結構資料儲存方案(一):鄰接列表模式模式
- Linux 下樹形結構的檢視Linux
- 樹形結構的儲存與查詢
- Oracle 樹形結構查詢的特殊用法Oracle
- 使用遞迴演算法結合資料庫解析成java樹形結構遞迴演算法資料庫Java
- 這個處理器的組合語言:組合語言
- 極簡架構模式-組合實體模式架構模式