定義
組合模式(Composite Pattern)也稱為整體-部分(Part-Whole)模式,它的宗旨是通過將單個對象(葉子節(jié)點)和組合對象(樹枝節(jié)點)用相同的接口進(jìn)行表示渺鹦。
作用:使客戶端對單個對象和組合對象保持一致的方式處理。
屬于結(jié)構(gòu)型模式稽荧。
適用場景
- 希望客戶端可以忽略組合對象與單個對象的差異時尺借。
- 對象層次具備整體和部分,呈樹形結(jié)構(gòu)(如樹形菜單蚊伞,操作系統(tǒng)目錄結(jié)構(gòu)沿癞,公司組織結(jié)構(gòu)等)援雇。
舉例
- HashMap putAll()
- ArrayList addAll()
- MyBatis SqlNode和其子實現(xiàn)
透明寫法
違背最少知道原則。
安全寫法
頂層抽象只定義所有子類共有的抛寝,滿足最少知道原則熊杨。
組合模式一定是樹形結(jié)構(gòu)嗎?
不一定盗舰。不管是整體還是個體晶府,都要用同一種方法來操作。
優(yōu)點
- 清楚地定義分層次的復(fù)雜對象钻趋,表示對象的全部或部分層次川陆。
- 讓客戶端忽略了層次的差異,方便對整個層次結(jié)構(gòu)進(jìn)行控制蛮位。
- 簡化客戶端代碼较沪。
- 符合開閉原則。
缺點
- 限制類型時會較為復(fù)雜失仁。
- 使設(shè)計變得更加抽象尸曼。