IOS設(shè)計(jì)模式之組合設(shè)計(jì)模式
Android中對(duì)組合模式的應(yīng)用,可謂是泛濫成粥,隨處可見(jiàn),那就是View和ViewGroup類的使用。在android UI設(shè)計(jì),幾乎所有的widget和布局類都依靠這兩個(gè)類。
組合模式,Composite Pattern,是一個(gè)非常巧妙的模式。幾乎所有的面向?qū)ο笙到y(tǒng)都應(yīng)用到了組合模式。
通過(guò)本文將讓你學(xué)會(huì)軟件開(kāi)發(fā)中的"何為樹(shù)形結(jié)構(gòu)"、"何為組合模式"、"組合模式可以解決的問(wèn)題"等相關(guān)知識(shí)。
內(nèi)容大綱:
1、樹(shù)形結(jié)構(gòu)
2、組合模式
3、編寫(xiě)文件夾系統(tǒng)
1、樹(shù)形結(jié)構(gòu)(大神或者計(jì)算機(jī)基礎(chǔ)很好的可以跳過(guò),不過(guò)這后面通過(guò)用面向?qū)ο蟮拇a實(shí)現(xiàn)的樹(shù)形結(jié)構(gòu),值得一閱)
在介紹組合設(shè)計(jì)模式之前,有必要先簡(jiǎn)單講講樹(shù)形結(jié)構(gòu),百度一下"樹(shù)形結(jié)構(gòu)",你很容易找到關(guān)于樹(shù)形結(jié)構(gòu)的相關(guān)基本概
念:
樹(shù)形結(jié)構(gòu)是一層次的嵌套結(jié)構(gòu)。 一個(gè)樹(shù)形結(jié)構(gòu)的外層和內(nèi)層有相似的結(jié)構(gòu), 所以這種結(jié)構(gòu)多可以遞歸的表示。
經(jīng)典數(shù)據(jù)結(jié)構(gòu)中的各種樹(shù)狀圖是一種典型的樹(shù)形結(jié)構(gòu):一顆樹(shù)可以簡(jiǎn)單的表示為根, 左子樹(shù), 右子樹(shù)。 左子樹(shù)和右子樹(shù)又有自己的子樹(shù)。
樹(shù)形結(jié)構(gòu)很容易懂,就和倒過(guò)來(lái)的大樹(shù)一樣,然后有一個(gè)根節(jié)點(diǎn),通過(guò)根節(jié)點(diǎn)我們可以拿到根節(jié)點(diǎn)相關(guān)聯(lián)的子節(jié)點(diǎn),通過(guò)子節(jié)點(diǎn)我們可以拿到子子節(jié)點(diǎn):
回到上面從百度拷貝來(lái)的關(guān)于"樹(shù)形結(jié)構(gòu)"的基本概念,它提到樹(shù)形結(jié)構(gòu)是有層次嵌套的結(jié)構(gòu),看下面的圖,正因?yàn)闃?shù)形結(jié)構(gòu)是層次嵌套的結(jié)構(gòu),
所以從整體和部分的角度來(lái)看,外層和內(nèi)層具有相似的結(jié)構(gòu),在算法數(shù)據(jù)結(jié)構(gòu)里是可以用遞歸算法表示的,但是要注意,
遞歸是面向過(guò)程語(yǔ)言的說(shuō)法哦,因?yàn)檫f歸思想本質(zhì)也是站在代碼邏輯的執(zhí)行過(guò)程來(lái)考慮的。
另外順便也補(bǔ)充一個(gè)數(shù)學(xué)圖形理論的東西:分形。這個(gè)也是分形圖形理論的內(nèi)容。👻感興趣的同學(xué)可以百度了解。
而在這里我們需要站在面向?qū)ο蟮慕嵌葋?lái)說(shuō),這個(gè)模式就是組合模式,但從思想上和面向過(guò)程的遞歸算法思想是類似的。
接下來(lái)我們通過(guò)代碼來(lái)實(shí)現(xiàn)如下圖的簡(jiǎn)單二叉樹(shù)的結(jié)構(gòu),當(dāng)然是用Objective-C來(lái)面相對(duì)象的實(shí)現(xiàn)嘍:
1-1、首先我們需要?jiǎng)?chuàng)建節(jié)點(diǎn)來(lái)表示上圖中的每個(gè)元素:
1-2、然后我們?cè)赩iewController.m去使用這個(gè)Node節(jié)點(diǎn)類來(lái)實(shí)現(xiàn)上面的二叉樹(shù)
1-3、最后打印看看結(jié)果是不是按照二叉樹(shù),從左往右遍歷的:
2、組合模式
先看看組合模式的UML圖,看不懂可以跳過(guò),我也解釋不清楚,說(shuō)不定以后就看懂了。
接下來(lái)就通過(guò)代碼實(shí)現(xiàn)下圖的組合模式,和上面二叉樹(shù)類似,差別下面的不是二叉樹(shù),代碼的差別就是節(jié)點(diǎn)類內(nèi)部用了數(shù)組來(lái)存儲(chǔ)子節(jié)點(diǎn):
2-1、創(chuàng)建一個(gè)節(jié)點(diǎn)對(duì)象:
2-2、看看ViewController.m中是如何使用這個(gè)節(jié)點(diǎn)的:
2-3、打印出結(jié)果:
3、編寫(xiě)文件夾系統(tǒng)
關(guān)于文件夾系統(tǒng),其實(shí)在應(yīng)用中或者是PC端應(yīng)用中都很常見(jiàn),一個(gè)文件夾包含多個(gè)子文件夾和子文件,而子文件夾又包含它的子文件夾和子文件,依次層次往下遞歸。
先看看動(dòng)態(tài)效果圖:
這個(gè)顯然就是組合模式實(shí)現(xiàn)的問(wèn)題域了,所以下面直接看源碼吧:
就不上代碼給大家看了👻,還是直接分享百度云的下載鏈接吧:鏈接: http://pan.baidu.com/s/1gdRLdIF 密碼: h8v3
以上所述是小逼給大家介紹的IOS設(shè)計(jì)模式之組合設(shè)計(jì)模式 ,希望對(duì)大家有所幫助!
- 使用設(shè)計(jì)模式中的Singleton單例模式來(lái)開(kāi)發(fā)iOS應(yīng)用程序
- 實(shí)例講解如何在iOS應(yīng)用開(kāi)發(fā)中使用設(shè)計(jì)模式中的代理模式
- iOS應(yīng)用設(shè)計(jì)模式開(kāi)發(fā)中對(duì)簡(jiǎn)單工廠和工廠方法模式的運(yùn)用
- IOS觀察者設(shè)計(jì)模式
- 詳解iOS應(yīng)用的設(shè)計(jì)模式開(kāi)發(fā)中Mediator中介者模式的使用
- 深入解析iOS應(yīng)用開(kāi)發(fā)中對(duì)設(shè)計(jì)模式中的橋接模式的使用
- iOS應(yīng)用運(yùn)用設(shè)計(jì)模式中的Strategy策略模式的開(kāi)發(fā)實(shí)例
- 實(shí)例講解設(shè)計(jì)模式中的命令模式在iOS App開(kāi)發(fā)中的運(yùn)用
- iOS應(yīng)用開(kāi)發(fā)中運(yùn)用設(shè)計(jì)模式中的組合模式的實(shí)例解析
- iOS App開(kāi)發(fā)中使用設(shè)計(jì)模式中的單例模式的實(shí)例解析
相關(guān)文章
iOS實(shí)現(xiàn)兩個(gè)控制器之間數(shù)據(jù)的雙向傳遞
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)兩個(gè)控制器之間數(shù)據(jù)的雙向傳遞的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-05-05iOS畢業(yè)設(shè)計(jì)之天氣預(yù)報(bào)App
這篇文章主要為大家詳細(xì)介紹了iOS畢業(yè)設(shè)計(jì)之天氣預(yù)報(bào)App,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10iOS開(kāi)發(fā)中使用Picker View實(shí)現(xiàn)一個(gè)點(diǎn)菜應(yīng)用的UI示例
這篇文章主要介紹了iOS開(kāi)發(fā)中使用Picker View實(shí)現(xiàn)一個(gè)點(diǎn)菜應(yīng)用的UI示例,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01iOS指紋驗(yàn)證TouchID應(yīng)用學(xué)習(xí)教程2
這篇文章主要為大家詳細(xì)iOS指紋驗(yàn)證TouchID應(yīng)用學(xué)習(xí)教程的第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01iOS自動(dòng)進(jìn)行View標(biāo)記的方法詳解
這篇文章主要給大家介紹了關(guān)于iOS自動(dòng)進(jìn)行View標(biāo)記的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04你應(yīng)該知道的tableViewCell行高計(jì)算處理
這篇文章主要給大家介紹了關(guān)于tableViewCell行高計(jì)算的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12iOS程序開(kāi)發(fā)中設(shè)置UITableView的全屏分隔線的方法(不畫(huà)線)
ableView是app開(kāi)發(fā)中常用到的控件,功能很強(qiáng)大,多用于數(shù)據(jù)的顯示。下面給大家介紹設(shè)置UITableView的全屏分隔線的兩種方法2016-04-04