23种设计模式之组合模式
組合模式的定義
定義: 將對象組合成樹形結構以表示 "部分-整體" 的層次結構,使得用戶對單個對象和組合對象的使用具有一致性.
通俗的說, 就是實現了樹形結構
通用類圖如下:
?
其中的三個角色如下:
抽象構件角色代碼:
?
樹枝構件代碼:
?
葉子構件代碼:
?
場景類代碼:
?
組合模式的應用
組合模式的優點:
組合模式的缺點:
我們在使用的時候, 樹葉和樹枝的定義直接使用了實現類, 這在面向接口編程上是很不恰當的, 與依賴倒置原則沖突, 限制了接口的影響范圍
組合模式的使用場景:
只要是樹形結構, 就要考慮使用組合模式, 只要是要體現局部和整體的關系的時候,而且這種關系還可能比較深, 應該考慮組合模式
組合模式的擴展
1.真實的組合模式
在上邊的例子中, Clien 中進行了樹的組裝, 而在實際項目中, 數據通常在數據庫中, 我們直接從數據庫將數據讀取放到樹上就可以了
2.透明的組合模式
組合模式有兩種實現: 透明模式和安全模式. 上面的實現就是安全模式, 透明模式的類圖如下:
?
透明模式就是把用來組合使用的方法放到抽象類中, 通過判斷getChild() 的返回值確定是葉子節點還是樹枝節點, 在 Leaf 中實現 add等方法要拋出異常, 如果處理不當, 會在運行期出現問題
在透明模式下, 遍歷整個樹形結構是比較容易的, 不用進行強制類型轉換.
透明模式的好處就是它基本遵循了依賴倒置原則, 方便系統擴展
3.組合模式的遍歷
有的時候不光要從上向下遍歷, 還要從下往上遍歷, 也就是通過子節點要找到他的父節點, 這時就要在抽象構件角色中添加 getParent 方法, 也就是在每個節點都增加一個父節點對象
總結
以上是生活随笔為你收集整理的23种设计模式之组合模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hbase/thrift/go连接失败
- 下一篇: 23种设计模式之桥梁模式