1. 程式人生 > >再談組合模式

再談組合模式

out cal .cn ear water 上海 temp 北京 lease

版權聲明:本文為博主原創文章,轉載請標明出處,謝謝! https://blog.csdn.net/u010926964/article/details/25366285

組合模式前面盡管已經學過了,可是那天給米老師講這個模式發現自己理解的還是不夠透徹。所以今天就再分析分析這個模式。

組合模式是通過把對象組合成樹形結構來表示“部分與總體”的層次結構,它使得用戶對單個對象和組合對象的使用具有一致性。從這句話上來看,組合模式應該是事先把對象組合成樹形結構,包含樹枝節點和樹葉節點。然後在對樹枝節點和樹葉節點進行統一的處理,使得用戶對樹枝節點和樹葉節點的使用具有一致性。

在什麽時候能夠使用組合模式呢?當需求中是體現部分與總體層次的結構時,以及你希望用戶能夠忽略組合對象與單個對象的不同。統一的使用組合結構中的全部對象時,就能夠使用組合模式了。也就是說首先對象的結構模式應該是樹形結構。具有明白的樹枝和樹葉節點,並且從主觀上能夠忽略樹枝和樹葉的不同,能夠統一的使用樹枝和樹葉。這個時候就應該使用組合模式。

還是用書上的樣例說明:

技術分享圖片

實例中北京總公司、上海華東分公司、南京辦事處、杭州辦事處都是樹枝節點。總公司人力資源部、總公司財務部、華東分公司人力資源部、華東分公司財務部、南京辦事處人力資源部、南京辦事處財務部、杭州辦事處人力資源部、杭州辦事處財務部都是樹葉節點。

當中總公司人力資源部與杭州辦事處人力資源部都屬於樹葉節點,不同的是他們屬於不同的樹枝。總公司人力資源部屬於總公司枝幹。杭州辦事處人力資源部屬於杭州辦事處枝幹。可是它們都能夠履行員工招聘培訓管理的職責,這就是統一的使用組合結構中的全部對象。

可是我們如果沒有各個樹枝節點下沒有人力部和財務部,那麽杭州辦事處和南京辦事處就成為樹葉節點。如今我們想要通過組合模式統一的為各個節點加入人力部和財務部是夠可行?從理論上是不可行的,在葉節點中盡管也有Add和Remove,可是這僅僅是為了達到葉節點和枝節點的一致性,葉節點本身不具備Add()、Remove方法。

所以杭州辦事處和南京辦事處以下是不能在加入節點的。可是實際中有沒有辦法讓各個公司和辦事處一致的加入人力部和財務部呢?答案是肯定能夠!但可能不是使用組合模式。人外有人天外有天,辦法總是有的,僅僅是自己現有水平可能還沒辦法解決,希望高手們指點!感謝!

再談組合模式