組合模式 Composite

一、概述

在生活中谒臼,我們通常希望一些統(tǒng)一的操作,例如當(dāng)我用殺毒軟件掃描該文件夾時(shí)耀里,往往不會(huì)關(guān)心里面有多少文件和子文件夾,我們只需要操作最外層的文件夾進(jìn)行掃描拾氓。

來看一幅圖:

這幅圖可以對應(yīng)上例:

1.最頂端組合對象 = 最外層的文件夾

2.葉對象 = 文件夾中的文件

3.子組合對象 = 子文件夾

文件夾與文件可以構(gòu)成上圖中的這種樹形結(jié)構(gòu)冯挎,客戶只需操作最外層的組合對象,忽略內(nèi)部葉對象與子組合對象咙鞍,便可以統(tǒng)一執(zhí)行房官,完成操作。

由此對象組合成樹形結(jié)構(gòu)來表現(xiàn) "整體和部分" 層次結(jié)構(gòu)续滋,并且組合能讓客戶以一致的方式處理個(gè)別對象以及組合對象翰守,就叫做組合模式。

這個(gè)模式的好處是客戶僅需與最頂層一個(gè)對象交互疲酌,便可以完成整個(gè)樹形系統(tǒng)的統(tǒng)一操作蜡峰,而且樹形結(jié)構(gòu)內(nèi)部節(jié)點(diǎn)上隨意刪除或者增加對象,對客戶是沒有影響的朗恳。

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

1湿颅、高層模塊調(diào)用簡單。

2粥诫、節(jié)點(diǎn)自由增加油航。

缺點(diǎn):在使用組合模式時(shí),其葉子和樹枝的聲明都是實(shí)現(xiàn)類怀浆,而不是接口谊囚,違反了依賴倒置原則。

二执赡、運(yùn)用

通過上例镰踏,可知組合模式中幾個(gè)角色:

Component(抽象類):它可以是接口或抽象類,為葉對象和組合對象聲明接口搀玖。

Leaf(葉對象):它在組合結(jié)構(gòu)中表示葉對象余境,葉對象沒有子節(jié)點(diǎn)。

Composite(組合對象):它在組合結(jié)構(gòu)中表示組合對象灌诅,組合對象包含子節(jié)點(diǎn)芳来,其子節(jié)點(diǎn)可以是葉對象,也可以是組合對象猜拾。

還是以掃描該文件夾為例即舌,簡單介紹一下,F(xiàn)older 類是組合對象挎袜,F(xiàn)ile 類是葉對象顽聂,F(xiàn)loder 中 add 方法提供了構(gòu)建樹形結(jié)構(gòu)的基礎(chǔ)方法肥惭;組合對象和葉對象必須都含有 scan 方法,才能做到統(tǒng)一執(zhí)行紊搪。

Component (抽象類)

Composite (組合對象)

Leaf (葉對象)

test:

三蜜葱、應(yīng)用場景

組合模式如果運(yùn)用得當(dāng),可以大大簡化客戶的代碼耀石。一般來說牵囤,組合模式適用于以下這兩種情況。

表示對象的部分-整體層次結(jié)構(gòu)滞伟。組合模式可以方便地構(gòu)造一棵樹來表示對象的部分-整體結(jié)構(gòu)揭鳞。特別是我們在開發(fā)期間不確定這棵樹到底存在多少層次的時(shí)候。在樹的構(gòu)造最終完成之后梆奈,只需要通過請求樹的最頂層對象野崇,便能對整棵樹做統(tǒng)一的操作。在組合模式中增加和刪除樹的節(jié)點(diǎn)非常方便亩钟,并且符合開放-封閉原則乓梨。

客戶希望統(tǒng)一對待樹中的所有對象。組合模式使客戶可以忽略組合對象和葉對象的區(qū)別径荔,客戶在面對這棵樹的時(shí)候督禽,不用關(guān)心當(dāng)前正在處理的對象是組合對象還是葉對象,也就不用寫一堆 if 总处、 else 語句來分別處理它們狈惫。組合對象和葉對象會(huì)各自做自己正確的事情,這是組合模式最重要的能力鹦马。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胧谈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荸频,更是在濱河造成了極大的恐慌菱肖,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旭从,死亡現(xiàn)場離奇詭異稳强,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)和悦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門退疫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸽素,你說我怎么就攤上這事褒繁。” “怎么了馍忽?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵棒坏,是天一觀的道長燕差。 經(jīng)常有香客問我,道長坝冕,這世上最難降的妖魔是什么徒探? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮喂窟,結(jié)果婚禮上刹帕,老公的妹妹穿的比我還像新娘。我一直安慰自己谎替,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布蹋辅。 她就那樣靜靜地躺著钱贯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侦另。 梳的紋絲不亂的頭發(fā)上秩命,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音褒傅,去河邊找鬼弃锐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛殿托,可吹牛的內(nèi)容都是我干的霹菊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼支竹,長吁一口氣:“原來是場噩夢啊……” “哼旋廷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起礼搁,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤饶碘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后馒吴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扎运,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年饮戳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豪治。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莹捡,死狀恐怖鬼吵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篮赢,我是刑警寧澤齿椅,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布琉挖,位于F島的核電站,受9級特大地震影響涣脚,放射性物質(zhì)發(fā)生泄漏示辈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一遣蚀、第九天 我趴在偏房一處隱蔽的房頂上張望矾麻。 院中可真熱鬧,春花似錦芭梯、人聲如沸险耀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甩牺。三九已至,卻和暖如春累奈,著一層夾襖步出監(jiān)牢的瞬間贬派,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工澎媒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搞乏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓戒努,卻偏偏與公主長得像请敦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子储玫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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

  • 【學(xué)習(xí)難度:★★★☆☆冬三,使用頻率:★★★★☆】直接出處:組合模式梳理和學(xué)習(xí):https://github.com/...
    BruceOuyang閱讀 986評論 0 1
  • 1 場景問題# 1.1 商品類別樹## 考慮這樣一個(gè)實(shí)際的應(yīng)用:管理商品類別樹。 在實(shí)現(xiàn)跟商品有關(guān)的應(yīng)用系統(tǒng)的時(shí)候...
    七寸知架構(gòu)閱讀 5,998評論 10 59
  • 組合多個(gè)對象形成樹形結(jié)構(gòu)以表示具有“整體—部分”關(guān)系的層次結(jié)構(gòu)缘缚。組合模式對單個(gè)對象(即葉子對象)和組合對象(即容器...
    lyu571閱讀 488評論 0 1
  • 組合模式Composite 背景 我們可以使用簡單的對象組合成復(fù)雜的對象勾笆,而這個(gè)復(fù)雜對象有可以組合成更大的對象。我...
    踐行者閱讀 481評論 1 3
  • 2017年4月2日早9時(shí)桥滨,不孝男李緩之?dāng)y至親晚輩窝爪,以清酒菜肴,敬祭于媽媽墓前: 痛失媽媽齐媒,流淚連連蒲每。近在咫尺,卻已...
    李緩之閱讀 2,344評論 41 52