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

模式定義

組合(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ì)模式之代理模式,看我72變

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)控

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夸政,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榴徐,更是在濱河造成了極大的恐慌守问,老刑警劉巖匀归,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異耗帕,居然都是意外死亡穆端,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門仿便,熙熙樓的掌柜王于貴愁眉苦臉地迎上來体啰,“玉大人,你說我怎么就攤上這事嗽仪』挠拢” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵闻坚,是天一觀的道長(zhǎng)沽翔。 經(jīng)常有香客問我,道長(zhǎng)鲤氢,這世上最難降的妖魔是什么搀擂? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任科汗,我火速辦了婚禮桌粉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跌宛。我一直安慰自己相种,他們只是感情好威恼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寝并,像睡著了一般箫措。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衬潦,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天斤蔓,我揣著相機(jī)與錄音,去河邊找鬼镀岛。 笑死弦牡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漂羊。 我是一名探鬼主播驾锰,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼走越!你這毒婦竟也來了椭豫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赏酥,沒想到半個(gè)月后喳整,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡今缚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年算柳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姓言。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞬项,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出何荚,到底是詐尸還是另有隱情囱淋,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布餐塘,位于F島的核電站妥衣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏戒傻。R本人自食惡果不足惜税手,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望需纳。 院中可真熱鬧芦倒,春花似錦、人聲如沸不翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽口蝠。三九已至器钟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妙蔗,已是汗流浹背傲霸。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眉反,地道東北人狞谱。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像禁漓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孵睬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

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