组合模式讲解
現在我們來看一下組合模式的定義與類型,定義是說將對象組合成樹形結構,以表示部分整體的層次結構,那他的作用是說使客戶端對單個對象和組合對象保持一致的方式處理,類型是結構型
打個比方,我們有一個樹形結構的菜單,然后在菜單里面還有子菜單,那在子菜單里面很有可能有子菜單的子菜單,那在這種樹形結構下,我們就可以使用組合模式,還有目錄,目錄下邊還有目錄,目錄下邊還有問題,那在這種情況下,也可以使用組合模式,那我們看一下圖
node節點是一個帶子元素的節點,那沒有子元素的節點叫葉子節點,就是圖中的leaf節點,那組合模式,讓我們能夠用樹形的方式,創建對象的結構,那樹里面包含了組合,以及個別的對象,那么我們把相同的操作,應用到組合和個別的對象上,在大多數業務場景下呢,我們就可以忽略對象組合和個別對象之間的差別,那我們再看一下
組合模式的應用場景,首先希望客戶端可以忽略組合對象與單個對象的差異時,還有一個處理一個樹形結構時,也就是說如果我們使用組合模式呢,對個別對象以及組合對象,就可以一視同仁
那我們接著來看一下組合模式的優點,可以清楚地定義分層次的復雜對象,表示對象的全部或者部分層次,強調的是讓客戶端忽略層次的差異,方便對整個層次結構進行控制,同時還會簡化客戶端的代碼,那簡化客戶端的代碼是因為第二條,因為我們可以一致的處理組合對象和單個對象,所以我們在客戶端代碼上,處理起來就比較簡化了,還有呢符合開閉原則,我們在組合模式中,增加新的含有子節點的節點,還有增加葉子節點的時候,都很方便,無須對現有的類庫,進行任何修改,這一點上符合開閉原則,那我們再看一下組合模式有什么缺點呢
首先限制類型時會比較復雜,打個比方,例如說我們在某個文件夾中,只能包含文本文件,我們在使用組合模式時,因為他們都來自相同的抽象層,也就是說節點的抽象層,那在這種情況下,我們必須通過在運行時,進行類型檢查,來實現,那在實現限制類型當中呢,自然就會變復雜,那第二條使設計變得更抽象,這個呢也很好理解,那如果我們的對象業務邏輯,非常復雜,那在實現組合模式的時候,還是非常有挑戰的,因為如果業務邏輯非常復雜的話,就會有一些特例,不是所有的方法都有葉子節點關聯,現在如果理解不了沒有關系,我們在后面coding的時候,在慢慢體會,而且呢設計模式,是非常值得我們回頭不斷來看的,每次學習都會增加新的體會,所以呢這需要一個過程,來慢慢理解,不要著急,我們一起慢慢來
我們看一下組合模式的相關設計模式,首先組合模式和訪問者模式,那訪問者模式我們在后面會講,這里面是一種組合應用,我們可以使用訪問者模式,來訪問組合模式的遞歸結構
?
總結
- 上一篇: 享元模式源码解析(jdk+tomcat)
- 下一篇: 组合模式coding