組合模式

組合模式的設(shè)計動機(jī):組合模式定義了如何將容器對象和葉子對象進(jìn)行遞歸組合肠虽,使得客戶在使用的過程中無須進(jìn)行區(qū)分旁舰,可以對他們進(jìn)行一致的處理蜡饵。

定義:組合模式組合多個對象形成樹形結(jié)構(gòu)以表示“整體-部分”的結(jié)構(gòu)層次烂瘫。

在使用組合模式中需要注意一點(diǎn)也是組合模式最關(guān)鍵的地方:葉子對象和組合對象實(shí)現(xiàn)相同的接口。這就是組合模式能夠?qū)⑷~子節(jié)點(diǎn)和對象節(jié)點(diǎn)進(jìn)行一致處理的原因帽哑。


類圖:


組合模式類圖

組合模式主要包含如下幾個角色:

1.Component :組合中的對象聲明接口谜酒,在適當(dāng)?shù)那闆r下,實(shí)現(xiàn)所有類共有接口的默認(rèn)行為妻枕。聲明一個接口用于訪問和管理Component子部件僻族。

2.Leaf:葉子對象。葉子結(jié)點(diǎn)沒有子結(jié)點(diǎn)屡谐。

3.Composite:容器對象述么,定義有枝節(jié)點(diǎn)行為,用來存儲子部件愕掏,在Component接口中實(shí)現(xiàn)與子部件有關(guān)操作度秘,如增加(add)和刪除(remove)等。

從模式結(jié)構(gòu)中我們看出了葉子節(jié)點(diǎn)和容器對象都實(shí)現(xiàn)Component接口饵撑,這也是能夠?qū)⑷~子對象和容器對象一致對待的關(guān)鍵所在剑梳。

模式實(shí)現(xiàn):

在文件系統(tǒng)中唆貌,可能存在很多種格式的文件,如果圖片垢乙,文本文件锨咙、視頻文件等等,這些不同的格式文件的瀏覽方式都不同追逮,同時對文件夾的瀏覽就是對文件夾中文件的瀏覽酪刀,但是對于客戶而言都是瀏覽文件,兩者之間不存在什么差別钮孵,現(xiàn)在只用組合模式來模擬瀏覽文件骂倘。


NXFileBase.h



NXFolder.h
NXFolder.m

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

1,清楚地定義分層次的復(fù)雜對象巴席,表示對象的全部或部分層次稠茂,使得增加新構(gòu)件也更容易。

2情妖,調(diào)用簡單,客戶端可以一致的使用組合結(jié)構(gòu)或其中單個對象诱担。

3毡证,定義了包含葉子對象和容器對象的類層次結(jié)構(gòu),葉子對象可以被組合成更復(fù)雜的容器對象蔫仙,而這個容器對象又可以被組合料睛,這樣不斷遞歸下去,可以形成復(fù)雜的樹形結(jié)構(gòu)摇邦。

4恤煞,容易在組合體內(nèi)加入對象構(gòu)件,客戶端不必因?yàn)榧尤肓诵碌膶ο髽?gòu)件而更改原有代碼

模式缺點(diǎn):

使設(shè)計變得更加抽象施籍,對象的業(yè)務(wù)規(guī)則如果很復(fù)雜居扒,則實(shí)現(xiàn)組合模式具有很大挑戰(zhàn)性,而且不是所有的方法都與葉子對象子類都有關(guān)聯(lián)丑慎。

適用場景:

1.需要表示一個對象整體或部分層次喜喂,在具有整體和部分的層次結(jié)構(gòu)中,希望通過一種方式忽略整體與部分的差異竿裂,可以一致地對待它們玉吁。

2.讓客戶能夠忽略不同對象層次的變化,客戶端可以針對抽象構(gòu)件編程腻异,無須關(guān)心對象層次結(jié)構(gòu)的細(xì)節(jié)进副。

總結(jié):

1,模式用于將多個對象組合成樹形結(jié)構(gòu)以表示“整體-部分”的結(jié)構(gòu)層次悔常。組合模式對單個對象(葉子對象)和組合對象(容器對象)的使用具有一致性影斑。

2给赞,組合對象的關(guān)鍵在于它定義了一個抽象構(gòu)建類,它既可表示葉子對象鸥昏,也可表示容器對象塞俱,客戶僅僅需要針對這個抽象構(gòu)建進(jìn)行編程,無須知道他是葉子對象還是容器對象吏垮,都是一致對待障涯。

3,組合模式雖然能夠非常好地處理層次結(jié)構(gòu)膳汪,也使得客戶端程序變得簡單唯蝶,但是它也使得設(shè)計變得更加抽象,而且也很難對容器中的構(gòu)件類型進(jìn)行限制遗嗽,這會導(dǎo)致在增加新的構(gòu)件時會產(chǎn)生一些問題粘我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市痹换,隨后出現(xiàn)的幾起案子征字,更是在濱河造成了極大的恐慌,老刑警劉巖娇豫,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匙姜,死亡現(xiàn)場離奇詭異,居然都是意外死亡冯痢,警方通過查閱死者的電腦和手機(jī)氮昧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浦楣,“玉大人袖肥,你說我怎么就攤上這事≌窭停” “怎么了椎组?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長历恐。 經(jīng)常有香客問我庐杨,道長,這世上最難降的妖魔是什么夹供? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任灵份,我火速辦了婚禮,結(jié)果婚禮上哮洽,老公的妹妹穿的比我還像新娘填渠。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布氛什。 她就那樣靜靜地躺著莺葫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枪眉。 梳的紋絲不亂的頭發(fā)上捺檬,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音贸铜,去河邊找鬼堡纬。 笑死,一個胖子當(dāng)著我的面吹牛蒿秦,可吹牛的內(nèi)容都是我干的烤镐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼棍鳖,長吁一口氣:“原來是場噩夢啊……” “哼炮叶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渡处,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤镜悉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后医瘫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體征讲,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡或听,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年角钩,在試婚紗的時候發(fā)現(xiàn)自己被綠了利凑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀雳。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡钥庇,死狀恐怖襟企,靈堂內(nèi)的尸體忽然破棺而出樱拴,到底是詐尸還是另有隱情馍悟,我是刑警寧澤畔濒,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站锣咒,受9級特大地震影響侵状,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毅整,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一趣兄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悼嫉,春花似錦艇潭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲁纠。三九已至,卻和暖如春鳍寂,著一層夾襖步出監(jiān)牢的瞬間改含,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工迄汛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捍壤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓隔心,卻偏偏與公主長得像白群,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硬霍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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

  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是組合模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 優(yōu)點(diǎn)和缺點(diǎn) 適用環(huán)境 模式應(yīng)用 一帜慢、...
    w1992wishes閱讀 883評論 0 2
  • 1 場景問題# 1.1 商品類別樹## 考慮這樣一個實(shí)際的應(yīng)用:管理商品類別樹。 在實(shí)現(xiàn)跟商品有關(guān)的應(yīng)用系統(tǒng)的時候...
    七寸知架構(gòu)閱讀 5,999評論 10 59
  • 繼承是is-a的關(guān)系唯卖。組合和聚合有點(diǎn)像粱玲,有些書上沒有作區(qū)分,都稱之為has-a拜轨,有些書上對其進(jìn)行了較為嚴(yán)格區(qū)分抽减,組...
    時待吾閱讀 452評論 0 1
  • 組合多個對象形成樹形結(jié)構(gòu)以表示具有“整體—部分”關(guān)系的層次結(jié)構(gòu)。組合模式對單個對象(即葉子對象)和組合對象(即容器...
    lyu571閱讀 488評論 0 1
  • 參考設(shè)計模式讀書筆記-----組合模式C++設(shè)計模式——組合模式Javascript設(shè)計模式理論與實(shí)戰(zhàn):組合模式 ...
    合肥黑閱讀 336評論 0 0