組合模式也稱為部分整體模式,結構型設計模式之一,組合模式比較簡單,它將一組相似的對象看作一個對象處理,并根據一個樹狀結構來組合對象,然后提供一個統一的方法去訪問相應的對象,以此忽略掉對象與對象集合之間的差別。生活中一個比較經典的例子就是組織結構的樹狀圖。 
將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性

在新增構件時不好對枝干中的構件類型進行限制,不能依賴類型系統來施加這些約束,因為在大多數情況下,他們都來自于相同的抽象層,此時,必須進行類型檢查來實現,過程比較復雜
組合模式有兩種不同的實現:透明模式和安全模式(4點中為安全模式),透明模式是把用來組合使用的方法放到抽象類中,不管葉子對象還是樹枝對象都有相同的結構。這種模式的缺點是通過判斷getChildren的返回值確認是葉子節點還是樹枝節點,如果處理不當,會在運行期出現問題,安全模式它是把樹枝節點和葉子節點徹底分開,樹枝節點單獨擁有用來組合的方法。
Android源碼中關于組合模式有一個非常經典的實現,我們幾乎每天都會使用到,那就是View和ViewGroup的嵌套組合。

這里省略了View和ViewGroup的一些方法,在Android的這個視圖層級中,容器一定是ViewGroup,而且只有ViewGroup才能包含其他的View,例如Realyout能包含TextView、Button等,但反過來TextView不能包含Relayout,因為TextView直接繼承了View,并不是一個容器,這里View的視圖層級中使用的其實是一種安全的設計模式。
新聞熱點
疑難解答