模式定義
組合(Composite Pattern)模式的定義:有時(shí)又叫作部分-整體模式,它是一種將對(duì)象組合成樹狀的層次結(jié)構(gòu)的模式嘱巾,用來表示“部分-整體”的關(guān)系,使用戶對(duì)單個(gè)對(duì)象和組合對(duì)象具有一致的訪問性,這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式浪感。
模式解決的問題
將對(duì)象組合成樹形結(jié)構(gòu)以表示''部分-整體''的層次結(jié)構(gòu)缎罢。組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性伊群。
模式角色
抽象構(gòu)件(Component)角色:它的主要作用是為樹葉構(gòu)件和樹枝構(gòu)件聲明公共接口,并實(shí)現(xiàn)它們的默認(rèn)行為屁使。在透明式的組合模式中抽象構(gòu)件還聲明訪問和管理子類的接口在岂;在安全式的組合模式中不聲明訪問和管理子類的接口,管理工作由樹枝構(gòu)件完成蛮寂。
樹葉構(gòu)件(Leaf)角色:是組合中的葉節(jié)點(diǎn)對(duì)象蔽午,它沒有子節(jié)點(diǎn),用于實(shí)現(xiàn)抽象構(gòu)件角色中 聲明的公共接口酬蹋。
樹枝構(gòu)件(Composite)角色:是組合中的分支節(jié)點(diǎn)對(duì)象及老,它有子節(jié)點(diǎn)。它實(shí)現(xiàn)了抽象構(gòu)件角色中聲明的接口范抓,它的主要作用是存儲(chǔ)和管理子部件骄恶,通常包含 Add()、Remove()匕垫、GetChild() 等方法僧鲁。
代碼實(shí)現(xiàn)
運(yùn)行結(jié)果:
優(yōu)缺點(diǎn)分析
優(yōu)點(diǎn):
組合模式使得客戶端代碼可以一致地處理單個(gè)對(duì)象和組合對(duì)象,無須關(guān)心自己處理的是單個(gè)對(duì)象象泵,還是組合對(duì)象寞秃,這簡(jiǎn)化了客戶端代碼;
更容易在組合體內(nèi)加入新的對(duì)象偶惠,客戶端不會(huì)因?yàn)榧尤肓诵碌膶?duì)象而更改源代碼春寿,滿足“開閉原則”;
缺點(diǎn):
設(shè)計(jì)較復(fù)雜忽孽,客戶端需要花更多時(shí)間理清類之間的層次關(guān)系绑改;
不容易限制容器中的構(gòu)件;
不容易用繼承的方法來增加構(gòu)件的新功能兄一;
生活中模式情景再現(xiàn)
在現(xiàn)實(shí)生活中厘线,存在很多“部分-整體”的關(guān)系。汽車與輪胎瘾腰、發(fā)動(dòng)機(jī)的關(guān)系皆的。醫(yī)院與科室、醫(yī)生的關(guān)系蹋盆。學(xué)校與學(xué)院费薄、學(xué)生硝全、老師的關(guān)系。
模式的啟發(fā)
組合模式是一種非常普遍和常用的模式楞抡,接口服務(wù)互相組合伟众,提供更豐富的接口,實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯召廷。一般情況會(huì)選擇使用組合代替繼承凳厢,組合更靈活、更方便竞慢。電影中的cp組合先紫,也是制造看點(diǎn),讓雙方的粉絲為其買單筹煮。
推薦閱讀:
java設(shè)計(jì)模式之訪問者模式遮精,“見人說人話,見鬼說鬼話”
java設(shè)計(jì)模式之原型模式败潦,本故事純屬虛構(gòu)本冲,如有雷同,純屬巧合
java設(shè)計(jì)模式之橋接模式劫扒,策略模式旗艦版檬洞,世界沒有免費(fèi)的午餐
java設(shè)計(jì)模式之構(gòu)建模式沟饥,私人訂制自己的創(chuàng)意
java設(shè)計(jì)模式之狀態(tài)模式添怔,策略模式的孿生兄弟
java設(shè)計(jì)模式之迭代器模式,顧客永遠(yuǎn)的上帝
java設(shè)計(jì)模式之模板模式贤旷,站在巨人的肩膀上成功
java設(shè)計(jì)模式之適配器模式澎灸,大丈夫能屈能伸
Head First 設(shè)計(jì)模式之命令模式,各司其職提高效率
Head First 設(shè)計(jì)模式之裝飾器模式遮晚,因?yàn)閰⑴c,所以認(rèn)同
Head First 設(shè)計(jì)模式之單例模式拦止,每個(gè)人都是唯一
Head First 設(shè)計(jì)模式之觀察者模式县遣,你我都是發(fā)布者和訂閱者
Head first 設(shè)計(jì)模式之策略模式,來源于生活汹族,用之于生活
更多文章:
15年經(jīng)驗(yàn)的老兵推薦書單萧求,高手是這樣煉成的,你讀了幾本顶瞒?
應(yīng)用監(jiān)控系列之誰開發(fā)誰運(yùn)行誰監(jiān)控