1. 程式人生 > >自我聯想學設計模式(初級版)-4-組合模式

自我聯想學設計模式(初級版)-4-組合模式

WHAT?

既然說了是組合,那麼肯定參與組合的不止一個,是多個。但是不是任意物件組合起來都可以成為組合模式呢?

其實不然。

這多個物件,它們彼此之間必須有“整體/部分”的關係,並且你想用一致的方式對待這些兌現時,你就需要組合模式。

那麼所謂的“整體/部分”關係,指的是什麼呢?

HeadFirst裡舉例使用的使用者介面,一些頂層元件(像是Frame或Panel)包含著其他元件(像選單,文字面板,滾動條,按鈕),你的GUI包含了若干部分,但是當你顯示它的時候,你認為它是一個整體。你告訴頂層的元件顯示,然後就放手不管,由頂層元件負責顯示所有相關的部分。

這裡的Menu中包含一個MenuComponent的列表,其中既可以放Menu,也可以放MenuItem。它們都繼承了MenuComponent抽象類。

WHY?

很簡單,如果我們開啟任何一個軟體,參考它的選單的話,就會發現,其實點選了上層的選單之後,下層選單也都顯示出來了,所以可以通過這個樹狀的結構,用最上面的根節點控制葉子節點的顯示和動作。

HOW?

因為繼承了相同的介面,所以可以層層傳遞,直接呼叫子類的函式