設計模式真解 組合模式篇

2021-08-19 13:24:49 字數 1133 閱讀 2204

組合模式

模式描述:將個體與個體用樹形結構搭建起來,能讓客戶以一致的方法處理個體與組合

現實案例:乙個超大的學校,有乙個學生會,對於校學生會而言,包含組織部,文娛部,學習部,宣傳部,體育部,科技部等,而校學生會下面還有每個學院的院學生會,院學生會也包含組織部,文娛部,學習部,宣傳部,體育部,科技部等,院下面還有各個系,系學生會也包含組織部,文娛部,學習部,宣傳部,體育部,科技部等,系下面還有專業,專業學生會也包含組織部,文娛部,學習部,宣傳部,體育部,科技部等

於是乙個學生會內部運動會展開了,如果每個層級的學生會都不同,就需要無數個不同的策劃案,顯得很麻煩

使用組合模式將每個層級的學生會組織構建成樹狀,比如某某學院的院學生會,就是乙個組合,某某學院某某系某某專業的學生會,也是乙個組合(即一顆子樹)除了層級不同,其他實現完全相同只要規格一樣,乙份策劃案就可以在每乙個層級的學生會組合中展開,除了內部運動會之外,其他的內部管理都可以用統一的方式在每乙個組合的節點執行,而不用考慮相容的問題

in my opinion:形成整體(整棵樹),組合(子樹),個體(葉子節點),當客戶使用三者的時候,是沒有操作上的區別的,也就是,客戶不必知道當前操作的是整體,組合還是個體

適用於整體與部分需要被一視同仁的需求

對單一職責一原則有所折衷,每個節點既有管理下下屬節點的功能,也有葉節點的功能

由於組合模式的非葉節點和葉節點終究存在差別,如果將葉節點和非葉節點拿出來對比,對於葉節點而言,遍歷子節點的這個介面如果存在顯然是冗餘的,於是對於葉節點的處理不同處理,分成了兩種組合模式

安全組合模式:葉節點不實現多餘介面,這樣客戶在使用該組合模式的時候需要進行一些額外的判斷,使組合模式變得不透明,但是安全性好,不會有冗餘介面出現

透明組合模式:將冗餘的介面返回none,這樣對外而言,就完全不用區分是否是葉節點了,整個組合模式對客戶透明,但是葉節點處無意義的冗餘介面可能會存在隱患

組合模式 設計模式 組合模式

1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...

設計模式真解 觀察者模式篇

觀察者模式 典型應用 客戶端的mvc架構中m和v的關係,服務端資料更新存檔機制,遊戲中任務,成就,預警的事件監聽,都適合用觀察者模式 模式描述 觀察者模式主要用於處理 一 對 多 的關係,當 1 發生變化的時候,多 需要分別發生變化,而且這個 多 的內容會進行動態增減,於是 多 就去 1 處訂閱,當...

設計模式 組合模式 組合模式使用

目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...