java設(shè)計模式之組合模式

模式定義

組合(Composite Pattern)模式的定義:有時又叫作部分-整體模式,它是一種將對象組合成樹狀的層次結(jié)構(gòu)的模式,用來表示“部分-整體”的關(guān)系,使用戶對單個對象和組合對象具有一致的訪問性,這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式。

模式解決的問題

將對象組合成樹形結(jié)構(gòu)以表示''部分-整體''的層次結(jié)構(gòu)。組合模式使得用戶對單個對象和組合對象的使用具有一致性。

模式角色

抽象構(gòu)件(Component)角色:它的主要作用是為樹葉構(gòu)件和樹枝構(gòu)件聲明公共接口,并實現(xiàn)它們的默認(rèn)行為。在透明式的組合模式中抽象構(gòu)件還聲明訪問和管理子類的接口;在安全式的組合模式中不聲明訪問和管理子類的接口,管理工作由樹枝構(gòu)件完成。

樹葉構(gòu)件(Leaf)角色:是組合中的葉節(jié)點(diǎn)對象,它沒有子節(jié)點(diǎn),用于實現(xiàn)抽象構(gòu)件角色中 聲明的公共接口。

樹枝構(gòu)件(Composite)角色:是組合中的分支節(jié)點(diǎn)對象,它有子節(jié)點(diǎn)。它實現(xiàn)了抽象構(gòu)件角色中聲明的接口,它的主要作用是存儲和管理子部件,通常包含 Add()、Remove()、GetChild() 等方法。

代碼實現(xiàn)

運(yùn)行結(jié)果:

優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn):

組合模式使得客戶端代碼可以一致地處理單個對象和組合對象,無須關(guān)心自己處理的是單個對象,還是組合對象,這簡化了客戶端代碼;

更容易在組合體內(nèi)加入新的對象,客戶端不會因為加入了新的對象而更改源代碼,滿足“開閉原則”;

缺點(diǎn):

設(shè)計較復(fù)雜,客戶端需要花更多時間理清類之間的層次關(guān)系;

不容易限制容器中的構(gòu)件;

不容易用繼承的方法來增加構(gòu)件的新功能;

生活中模式情景再現(xiàn)

在現(xiàn)實生活中,存在很多“部分-整體”的關(guān)系。汽車與輪胎、發(fā)動機(jī)的關(guān)系。醫(yī)院與科室、醫(yī)生的關(guān)系。學(xué)校與學(xué)院、學(xué)生、老師的關(guān)系。

模式的啟發(fā)

組合模式是一種非常普遍和常用的模式,接口服務(wù)互相組合,提供更豐富的接口,實現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。一般情況會選擇使用組合代替繼承,組合更靈活、更方便。電影中的cp組合,也是制造看點(diǎn),讓雙方的粉絲為其買單。


推薦閱讀

java設(shè)計模式之訪問者模式,“見人說人話,見鬼說鬼話”

java設(shè)計模式之原型模式,本故事純屬虛構(gòu),如有雷同,純屬巧合

java設(shè)計模式之橋接模式,策略模式旗艦版,世界沒有免費(fèi)的午餐

java設(shè)計模式之代理模式,看我72變

java設(shè)計模式之構(gòu)建模式,私人訂制自己的創(chuàng)意

java設(shè)計模式之狀態(tài)模式,策略模式的孿生兄弟

java設(shè)計模式之迭代器模式,顧客永遠(yuǎn)的上帝

java設(shè)計模式之模板模式,站在巨人的肩膀上成功

java設(shè)計模式之適配器模式,大丈夫能屈能伸

Head First 設(shè)計模式之命令模式,各司其職提高效率

Head First 設(shè)計模式之裝飾器模式,因為參與,所以認(rèn)同

Head First 設(shè)計模式之單例模式,每個人都是唯一

Head First 設(shè)計模式之觀察者模式,你我都是發(fā)布者和訂閱者

Head first 設(shè)計模式之策略模式,來源于生活,用之于生活

更多文章:

15年經(jīng)驗的老兵推薦書單,高手是這樣煉成的,你讀了幾本?

應(yīng)用監(jiān)控系列之誰開發(fā)誰運(yùn)行誰監(jiān)控

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文的主要內(nèi)容: 介紹組合模式 示例 組合模式總結(jié) 源碼分析組合模式的典型應(yīng)用java.awt中的組合模式Java...
    小旋鋒的簡書閱讀 1,143評論 0 4
  • (轉(zhuǎn)載)原文地址 在閻宏博士的《JAVA與模式》一書中開頭是這樣描述裝飾(Decorator)模式的: 裝飾模式又...
    zjk_00閱讀 680評論 0 2
  • 我最近都比較負(fù)能量,心情實在是壞透了,剛好今天有空,去花市逛了一圈,看著那里的花、多肉植物,心情瞬間好了許多。看到...
    子追閱讀 320評論 0 1
  • 今天晚上爸爸邀請了圓圓姑姑和我們一家一起去看電影。電影的名字叫《復(fù)仇者聯(lián)盟4》,其實我沒太看懂,就是覺得很...
    黃露瑤閱讀 200評論 0 0
  • 我看見過五彩的世界并一度想把它寫下來。 那一晚朋友組個局,我猶豫再三還是去了。我越來越厭倦這樣的聚會,總以談心為目...
    朱光遠(yuǎn)閱讀 537評論 6 1

友情鏈接更多精彩內(nèi)容