《Java與模式》學習筆記:設計模式——合成(Composite)模式

合成模式
合成(Composite)模式屬於對象的結構模式。
1.定義:合成模式將對象組織到樹結構中,可以用來描述整體和部分的關係。合成模式可以使客戶端將單純的元素和複合的元素同等看待。
注意:就如閻博士書中所說,用文件系統來理解合成模式是個很好的方式。

2.兩種實現
1)透明式:子結點集合的管理方法在抽象類或接口中定義,向客戶端隱藏樹葉結點和樹枝結點的區別。
缺點:雖然樹枝對象還是樹葉對象在客戶端看來是沒區別了,但是他們兩者確實是有區別的。使用透明式的實現方式,就會發生這樣的情況:客戶端可能調用了樹葉對象的子結點管理方法,使用透明式實現使得這樣的錯誤在編譯器無法被檢查出來,只能延遲到運行期纔會暴露出來。(說白了就是客戶端可能會調到空的方法。)

2)安全式:子結點集合的管理方式只在樹枝接點中定義,客戶端必須明確知道當前對象到底是樹枝還是樹葉。
缺點:這種方式不夠透明,樹枝和樹葉具有不同的接口,客戶端就不能把它們當成同一類對象看待了。(說白了就是不能把樹枝和樹葉全部上轉成他們的抽象類或接口。)

3.合成模式實現的幾個問題
1)樹的方向(說白了就是:子結點中是否應該維持父結點的引用,父結點中是否應該維持子結點的引用)
2)遍歷時緩存(不明白撒意思)
3)客戶端不應該直接調用樹葉類,應當由父類向樹葉類進行委派。(不明白撒意思)

4.應該使用合成模式的情形
1)需要描述對象的部分和整體的等級結構
2)需要客戶端忽略掉個體構件和組合構件的區別。客戶端必須平等對待所有的構件,包括個體構件和組合構件

5.合成模式的優點
1)合成模式可以很容易地增加新種類的構件
2)使用合成模式可以使得構件對客戶端透明

6.合成模式的缺點
1)不容易控制樹枝構件的類型
2)使用繼承的方法來增加新的行爲比較困難。

7.思考
前段時間碰到的權限管理,裏面就有權限樹的概念,可否應用合成模式? 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章