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

開篇引言:“從前有座山,山上有個(gè)廟陋桂,廟里有個(gè)和尚在講故事,講什么故事呢汗贫?將從前有座山落包,山上有個(gè)廟摊唇,廟里有個(gè)和尚在講故事,講什么故事呢有序?從前岛请。崇败。。后室“杜”

對于Android開發(fā)者來說,下面這幅圖應(yīng)該會(huì)很熟悉痛黎。在一個(gè)APP頁面中,經(jīng)常是一個(gè)ViewGroup容器包含了眾多子ViewGroupView桌肴,就像老和尚講故事那樣琉历,層層嵌套,組成一個(gè)樹形結(jié)構(gòu)彪置。

在這里插入圖片描述

在面向?qū)ο蟮氖澜缰腥裁礃拥膶ο蟛拍芙M合成樹形結(jié)構(gòu)呢潘懊?用“本是同根生”這句來表示是最合適不過贿衍。我們知道面向?qū)ο蟮囊淮筇卣骶褪抢^承,一個(gè)基類可以派生出若干之類释树,之類又可以繼續(xù)派生之類。這樣子子孫孫無窮匱也奢啥。最終構(gòu)成了樹形結(jié)構(gòu)桩盲。用英文表達(dá)更合適:Family Tree席吴。也就是說在面向?qū)ο蟮氖澜缰校^承關(guān)系是組合模式的前提條件姑曙。而之所以用繼承迈倍,是因?yàn)橹悡碛辛烁割愊嗨频奶卣鳌?br> 所以組合模式的定義就很好理解了:把一組相似的對象當(dāng)作一個(gè)單一的對象啼染。組合模式依據(jù)樹形結(jié)構(gòu)來組合對象,用來表示部分以及整體層次卦洽。

可以說組合模式可以總結(jié)如下:

1阀蒂、在繼承關(guān)系中,因?yàn)樽宇惪梢栽L問父類的相關(guān)方法蚤霞,所以子類可以當(dāng)做父類來使用昧绣。整體上來看夜畴,就是樹形結(jié)構(gòu)中的所有元素可以當(dāng)做一種元素來處理删壮,比如上圖中不論是ViewGroup還是View,都可以當(dāng)做其View來處理兔簇,因?yàn)樗麄兌加泄餐母割惙椒⑺觥T诒热瑛B類可以分成鴿子狸窘、老鷹坯认,白鶴牛哺、布谷鳥、鸚鵡等等等巩趁,而“天高任鳥飛”中的這個(gè)“鳥”可不是特指某一種鳥议慰,而是所有會(huì)飛的鳥蠢古。

2草讶、看本文開始的圖炉菲,每個(gè)ViewGroup都含有ViewGroupView,很明顯的可以看出整體和局部的關(guān)系践啄。

組合模式的使用場景很廣泛沉御,如果你使用過Json格式的數(shù)據(jù)的話吠裆,對這種模式肯定陌生,比如Gson的JsonElement诵棵,就是組合模式的一個(gè)經(jīng)典應(yīng)用履澳。

在這里插入圖片描述

如果你學(xué)習(xí)過Flutter的話怀跛,那么也應(yīng)該對此模式不會(huì)陌生距贷,比如FlutterElement也是應(yīng)用了組合模式,見下圖:

在這里插入圖片描述

組合模式的理解并不難吻谋,在這里就不在寫代碼例子了忠蝗,感覺沒啥必要。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漓拾,一起剝皮案震驚了整個(gè)濱河市阁最,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骇两,老刑警劉巖速种,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異低千,居然都是意外死亡配阵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門矾芙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拂铡,“玉大人,你說我怎么就攤上這事失球×揖危” “怎么了猾浦?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵素邪,是天一觀的道長磨确。 經(jīng)常有香客問我摆舟,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任剂碴,我火速辦了婚禮,結(jié)果婚禮上洽议,老公的妹妹穿的比我還像新娘。我一直安慰自己儿捧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布临谱。 她就那樣靜靜地躺著苟穆,像睡著了一般跟磨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偷遗,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天泪电,我揣著相機(jī)與錄音鲜锚,去河邊找鬼。 笑死蔬捷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妥粟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼旅择,長吁一口氣:“原來是場噩夢啊……” “哼柱蟀!你這毒婦竟也來了康聂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤廊佩,失蹤者是張志新(化名)和其女友劉穎谓松,沒想到半個(gè)月后鬼譬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巩螃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年畏纲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锄贼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浸策。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兄裂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出港华,到底是詐尸還是另有隱情道川,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布立宜,位于F島的核電站冒萄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏橙数。R本人自食惡果不足惜尊流,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灯帮。 院中可真熱鬧崖技,春花似錦、人聲如沸钟哥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腻贰。三九已至吁恍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間播演,已是汗流浹背冀瓦。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留写烤,地道東北人翼闽。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像洲炊,于是被迫代替她去往敵國和親感局。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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