分類
合成模式種類分為透明式和安全式 , 主要區分在於樹枝構件中 , 管理方法是在抽象構件中定義 , 還是直接在樹枝構件中定義.
透明式 , 管理方法在抽象構件中定義 , 同時樹葉節點需要用平庸的方式實現管理方法 .
安全式 , 在樹枝構件中直接定義管理方法 , 這樣避免在樹葉構件中進行定義 .
組成
合成模式由抽象構件、樹枝構件、樹葉構件三部分組成 .
抽象構件 , 為樹結構中節點對象定義接口以及默認行為.
樹枝構件 , 擁有下一級樹葉節點對象 , 同時對樹葉節點對象進行管理 .
樹葉構件 , 沒有下一級節點對象 , 樹結構最末端 , 由該對象組成上一級的樹枝節點對象 .
用途
經常會出現有樹結構的情況 , 其中由單獨的對象或者單獨對象組成的合成對象組成 , 此時就需要利用一種方式來完成樹結構的構建工作 .
合成模式提供一個樹結構中所有對象的統一接口 , 規範樹中單獨對象和合成對象的構建過程 , 合成模式更像一個數據結構 .
方向性
合成模式 (樹結構) 的方向性 , 分為三類 , 向下、向上、雙向 .
向下性 , 一般情況結構為向下性 , 也就是父類節點中包含子節點的引用 , 而子節點並不知道它的父節點 .
向上性 , 每一個子節點中都包含一個父類節點的引用 , 同時父節點是不知道子節點的情況 .
雙向性 , 父節點和子節點都包含有對方的引用 , 當需要使用時 , 可以利用引用找到對方 .
優缺點
優點 : 增加新種類構建變得輕鬆 .
客戶端不需要知道當前使用的構建為樹枝節點還是樹葉節點 , 同時為一個構件接口 .
缺點 : 控制樹枝構建的類型就不太容易 .
繼承的方式完成新功能的增加變得困難 , 因為需要對繼承的所有對象進行新功能增加的實現工作