快速理解Java設計模式中的組合模式
組合模式是一種常見的設計模式(但我感覺有點復雜)也叫合成模式,有時又叫做部分-整體模式,主要是用來描述部分與整體的關系。
個人理解:組合模式就是將部分組裝成整體。
定義如下:
將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。
通用類圖如下:

組合模式的包含角色:
● Component 抽象構件角色
定義參加組合對象的共有方法和屬性,可以定義一些默認的行為或屬性。
● Leaf 葉子構件
葉子對象,其下再也沒有其他的分支,也就是遍歷的最小單位。
● Composite 樹枝構件
樹枝對象,它的作用是組合樹枝節(jié)點和葉子節(jié)點形成一個樹形結構。
通用源代碼:
抽象構件
public abstract class Component {
//個體和整體都具有的共享
public void do Something(){
//編寫業(yè)務邏輯
}
}
樹枝構建
public class Composite extends Component {
//構件容器
private Array List<component> component Array List = new Array List<component>()
//增加一個葉子構件或樹枝構件
public void add(Component component){
this.component Array List.add(component);
}
//刪除一個葉子構件或樹枝構件
public void remove(Component component){
this.component Array List.remove(component);
}
//獲得分支下的所有葉子構件和樹枝構件
public Array List<component> get Children(){
return this.component Array List;
}
}
樹葉節(jié)點是沒有子下級對象的對象,定義參加組合的原始對象行為。
樹葉構件
public class Leaf extends Component {
/*
*
可以覆寫父類方法
* public void do Something(){
*
* }
*/
}
測試類負責樹狀結構的建立,并可以通過遞歸方式遍歷整個樹。
public class Client {
public static void main(String[] args) {
//創(chuàng)建一個根節(jié)點
Composite root = new Composite();
root.do Something();
//創(chuàng)建一個樹枝構件
Composite branch = new Composite();
//創(chuàng)建一個葉子節(jié)點
Leaf leaf = new Leaf();
//建立整體
root.add(branch);
branch.add(leaf);
}
//通過遞歸遍歷樹
public static void display(Composite root){
for(Component c:root.get Children()){
if(c instanceof Leaf){ //葉子節(jié)點
c.do Something();
}else{ //樹枝節(jié)點
display((Composite)c);
}
}
}
}
組合模式的優(yōu)點:
● 高層模塊調(diào)用簡單
一棵樹形機構中的所有節(jié)點都是Component,局部和整體對調(diào)用者來說沒有任何區(qū)別,也就是說,高層模塊不必關心自己處理的是單個對象還是整個組合結構,簡化了高層模塊的代碼。
● 節(jié)點自由增加
使用了組合模式后,我們可以看看,如果想增加一個樹枝節(jié)點、樹葉節(jié)點是不是都很容易,只要找到它的父節(jié)點就成,非常容易擴展,符合開閉原則,對以后的維護非常有利。
組合模式的缺點:
組合模式有一個非常明顯的缺點,看到我們在場景類中的定義,提到樹葉和樹枝使用時的定義了嗎?直接使用了實現(xiàn)類!這在面向接口編程上是很不恰當?shù)?,與依賴倒置原則沖突,讀者在使用的時候要考慮清楚,它限制了你接口的影響范圍。
使用場景:
● 維護和展示部分-整體關系的場景,如樹形菜單、文件和文件夾管理。
● 從一個整體中能夠獨立出部分模塊或功能的場景。
注意事項:
只要是樹形結構,就要考慮使用組合模式,這個一定要記住,只要是要體現(xiàn)局部和整體的關系的時候,而且這種關系還可能比較深,考慮一下組合模式吧。
總結
以上就是本文關于快速理解Java設計模式中的組合模式的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java設計模式——工廠設計模式詳解、Java設計模式之訪問者模式使用場景及代碼示例、Java設計模式筆記之抽象工廠代碼示例等,有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!
相關文章
MybatisPlus調(diào)用原生SQL的實現(xiàn)方法
本文主要介紹了MybatisPlus調(diào)用原生SQL的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02

