目錄
- 從生活場景出發(fā),映射組合模式
- 組合模式的理論概念
- 組合模式的實(shí)現(xiàn)
- 組合模式在源碼中的應(yīng)用
- 組合 “優(yōu)于” 繼承
從生活場景出發(fā)梳毙,映射組合模式
- 輪船上的集裝箱
- 集裝箱內(nèi)的盒子
情景說明:海運(yùn)輪船上有很多集裝箱
到忽,集裝箱里面又裝滿了更小的包裝箱
翎朱。一般情況下瘾英,集裝箱
與集裝箱
單獨(dú)排列組合橙依。包裝箱
與包裝箱
單獨(dú)排列組合证舟。雖然如此,但并不妨礙現(xiàn)實(shí)生活中在集裝箱
旁邊放許多個(gè)包裝箱
窗骑。
這里我們不探討女责,如何裝配可以裝入更多的箱子問題。有興趣的同學(xué)创译,自行百度百科>>裝箱問題抵知。
設(shè)計(jì)模式某些時(shí)候就是映射生活中的最佳實(shí)踐,就像上面的生活場景一樣。我們需要使用軟件設(shè)計(jì)思想將其表達(dá)出來刷喜,在這里組合模式就顯得很合適了残制。在繼續(xù)之前我先梳理下組合模式的理論知識,以確保在講實(shí)現(xiàn)的時(shí)候會比較自然掖疮。
組合模式的理論概念
組合模式的定義:將對象組合成樹形結(jié)構(gòu)(如上面兩幅圖)以表示“部分-整體”的層次結(jié)構(gòu)初茶。組合模式使得用戶對單個(gè)對象和組合對象的使用具有一致性。
組合模式的目的:讓客戶端不再區(qū)分操作的是組合對象還是葉子對象浊闪,而是以一個(gè)統(tǒng)一的方式來操作恼布。
-
何時(shí)備選用組合模式:
- 如果你想表示對象的部分-整體層次結(jié)構(gòu)時(shí)。
- 如果你希望統(tǒng)一的使用組合對象中的所有對象搁宾。
組合模式的實(shí)現(xiàn)
在集裝箱問題上折汞,我們先抽象出容器的概念。無論是集裝箱猛铅,還是包裝箱都隸屬于容器的范疇字支。容器可以裝物品凤藏,也可以裝更小容器奸忽。一個(gè)容器在生活是用來裝物品,還是用來裝容器這個(gè)也全憑客戶的喜好揖庄。
先對問題進(jìn)行分析栗菜,抽象出如下幾個(gè)角色。
角色 | 能力描述 |
---|---|
容器 | 具備載物能力 |
容器(集裝箱) | 具備強(qiáng)大的載物能力 |
容器(包裝箱) | 具備較小的載物能力 |
容器(航海貨輪) | 神一樣的載物能力 |
實(shí)體 | 不具備載物能力 |
客戶端(暴發(fā)戶小張) | 有錢任性 |
場景演練:
- 暴發(fā)戶小張蹄梢,買了一艘貨輪用來給自己搬家疙筹。
- 暴發(fā)戶小張指揮工人,把實(shí)體搬進(jìn)集裝箱禁炒。
- 暴發(fā)戶小張指揮吊車而咆,把集裝箱搬進(jìn)貨輪。
- 暴發(fā)戶小張開走了貨輪幕袱,中途撞冰山沉了……
TODO ://
組合模式在源碼中的應(yīng)用
TODO ://
組合 “優(yōu)于” 繼承
TODO ://