国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

IOS設(shè)計模式之組合設(shè)計模式

2020-07-26 03:27:00
字體:
供稿:網(wǎng)友

Android中對組合模式的應(yīng)用,可謂是泛濫成粥,隨處可見,那就是View和ViewGroup類的使用。在android UI設(shè)計,幾乎所有的widget和布局類都依靠這兩個類。

組合模式,Composite Pattern,是一個非常巧妙的模式。幾乎所有的面向?qū)ο笙到y(tǒng)都應(yīng)用到了組合模式。

通過本文將讓你學(xué)會軟件開發(fā)中的"何為樹形結(jié)構(gòu)"、"何為組合模式"、"組合模式可以解決的問題"等相關(guān)知識。

內(nèi)容大綱:

1、樹形結(jié)構(gòu)

2、組合模式

3、編寫文件夾系統(tǒng)

1、樹形結(jié)構(gòu)(大神或者計算機(jī)基礎(chǔ)很好的可以跳過,不過這后面通過用面向?qū)ο蟮拇a實現(xiàn)的樹形結(jié)構(gòu),值得一閱)

   在介紹組合設(shè)計模式之前,有必要先簡單講講樹形結(jié)構(gòu),百度一下"樹形結(jié)構(gòu)",你很容易找到關(guān)于樹形結(jié)構(gòu)的相關(guān)基本概

念:

   樹形結(jié)構(gòu)是一層次的嵌套結(jié)構(gòu)。 一個樹形結(jié)構(gòu)的外層和內(nèi)層有相似的結(jié)構(gòu), 所以這種結(jié)構(gòu)多可以遞歸的表示。

   經(jīng)典數(shù)據(jù)結(jié)構(gòu)中的各種樹狀圖是一種典型的樹形結(jié)構(gòu):一顆樹可以簡單的表示為根, 左子樹, 右子樹。 左子樹和右子樹又有自己的子樹。

  

  樹形結(jié)構(gòu)很容易懂,就和倒過來的大樹一樣,然后有一個根節(jié)點,通過根節(jié)點我們可以拿到根節(jié)點相關(guān)聯(lián)的子節(jié)點,通過子節(jié)點我們可以拿到子子節(jié)點:

  

  回到上面從百度拷貝來的關(guān)于"樹形結(jié)構(gòu)"的基本概念,它提到樹形結(jié)構(gòu)是有層次嵌套的結(jié)構(gòu),看下面的圖,正因為樹形結(jié)構(gòu)是層次嵌套的結(jié)構(gòu),

  所以從整體和部分的角度來看,外層和內(nèi)層具有相似的結(jié)構(gòu),在算法數(shù)據(jù)結(jié)構(gòu)里是可以用遞歸算法表示的,但是要注意,

  遞歸是面向過程語言的說法哦,因為遞歸思想本質(zhì)也是站在代碼邏輯的執(zhí)行過程來考慮的。

  另外順便也補(bǔ)充一個數(shù)學(xué)圖形理論的東西:分形。這個也是分形圖形理論的內(nèi)容。👻感興趣的同學(xué)可以百度了解。

 

  而在這里我們需要站在面向?qū)ο蟮慕嵌葋碚f,這個模式就是組合模式,但從思想上和面向過程的遞歸算法思想是類似的。

  接下來我們通過代碼來實現(xiàn)如下圖的簡單二叉樹的結(jié)構(gòu),當(dāng)然是用Objective-C來面相對象的實現(xiàn)嘍:  

   

  1-1、首先我們需要創(chuàng)建節(jié)點來表示上圖中的每個元素:


  1-2、然后我們在ViewController.m去使用這個Node節(jié)點類來實現(xiàn)上面的二叉樹

  1-3、最后打印看看結(jié)果是不是按照二叉樹,從左往右遍歷的:

2、組合模式

  先看看組合模式的UML圖,看不懂可以跳過,我也解釋不清楚,說不定以后就看懂了。

  接下來就通過代碼實現(xiàn)下圖的組合模式,和上面二叉樹類似,差別下面的不是二叉樹,代碼的差別就是節(jié)點類內(nèi)部用了數(shù)組來存儲子節(jié)點:

  2-1、創(chuàng)建一個節(jié)點對象:

 

  2-2、看看ViewController.m中是如何使用這個節(jié)點的:

  

  2-3、打印出結(jié)果:

  

3、編寫文件夾系統(tǒng)

關(guān)于文件夾系統(tǒng),其實在應(yīng)用中或者是PC端應(yīng)用中都很常見,一個文件夾包含多個子文件夾和子文件,而子文件夾又包含它的子文件夾和子文件,依次層次往下遞歸。

先看看動態(tài)效果圖:

這個顯然就是組合模式實現(xiàn)的問題域了,所以下面直接看源碼吧:

  就不上代碼給大家看了👻,還是直接分享百度云的下載鏈接吧:鏈接: http://pan.baidu.com/s/1gdRLdIF 密碼: h8v3

以上所述是小逼給大家介紹的IOS設(shè)計模式之組合設(shè)計模式 ,希望對大家有所幫助!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴安盟| 搜索| 仲巴县| 晋宁县| 山东省| 南木林县| 梨树县| 南皮县| 屯昌县| 安达市| 苍溪县| 彭水| 汪清县| 马鞍山市| 清流县| 永和县| 海阳市| 循化| 保靖县| 岳池县| 喀什市| 海丰县| 察隅县| 汪清县| 松阳县| 武胜县| 临猗县| 四会市| 山阳县| 饶河县| 罗定市| 蒲城县| 鄂托克旗| 松阳县| 朝阳市| 房产| 青州市| 定结县| 霍山县| 保山市| 榆林市|