鍍金池/ 教程/ iOS/ 使用設(shè)計(jì)模式
查找信息
使用設(shè)計(jì)模式
設(shè)計(jì)用戶界面
應(yīng)用程序開發(fā)過程
iOS 技術(shù)
接下來做什么
串聯(lián)圖
處理 Foundation
編寫自定類
整合數(shù)據(jù)
基礎(chǔ)
設(shè)置
添加數(shù)據(jù)
定義交互

使用設(shè)計(jì)模式

設(shè)計(jì)模式可以解決常見的軟件工程問題。模式是抽象設(shè)計(jì),而非代碼。采用一種設(shè)計(jì),就是應(yīng)用它的通用模式來滿足您的特定需求。不管是創(chuàng)建哪種類型的應(yīng)用程序,最好能先了解框架中使用的基本設(shè)計(jì)模式。了解設(shè)計(jì)模式有助于更高效地使用框架,并且可讓您編寫的程序復(fù)用程度更高、擴(kuò)展能力更強(qiáng)和更容易修改。

http://wiki.jikexueyuan.com/project/ios-developer-library/images/design_patterns_2x.png" alt="" />

MVC

對(duì)于任何 iOS 應(yīng)用程序而言,模型-視圖-控制器 (MVC) 都是一個(gè)優(yōu)秀設(shè)計(jì)的關(guān)鍵所在。MVC 會(huì)將應(yīng)用程序中的對(duì)象分配給以下三種角色中的一種:模型、視圖或者控制器。在這種模式中,模型會(huì)記錄應(yīng)用程序的數(shù)據(jù),視圖會(huì)顯示用戶界面并構(gòu)成應(yīng)用程序的內(nèi)容,而控制器則會(huì)管理您的視圖。通過響應(yīng)用戶的操作并使用內(nèi)容填充視圖,控制器充當(dāng)了模型和視圖二者之間通信的通道。

http://wiki.jikexueyuan.com/project/ios-developer-library/images/ModelViewController_2x.png" alt="" />

在構(gòu)建 ToDoList 應(yīng)用程序的過程中,您遵循的就是以 MVC 為中心的設(shè)計(jì)模式。在串聯(lián)圖中構(gòu)建的界面組成了視圖層 XYZAddToDoItemViewController 和 XYZToDoListViewController 就是管理視圖的控制器。在添加數(shù)據(jù)中,您需要結(jié)合數(shù)據(jù)模型來處理應(yīng)用程序中的視圖和控制器。在開始設(shè)計(jì)自己的應(yīng)用程序時(shí),很重要的一點(diǎn)就是以 MVC 為中心進(jìn)行設(shè)計(jì)。

目標(biāo)-操作

目標(biāo)-操作從概念上講是一個(gè)簡單的設(shè)計(jì):特定事件發(fā)生時(shí),一個(gè)對(duì)象會(huì)向另一個(gè)對(duì)象發(fā)送信息。操作信息就是在源代碼中定義的選擇器,而目標(biāo)(即接收信息的對(duì)象)則是能夠執(zhí)行該操作的對(duì)象(通常為視圖控制器)。發(fā)送操作信息的對(duì)象通常為控制,例如按鈕、滑塊或開關(guān),它能夠觸發(fā)事件對(duì)用戶的交互操作(例如輕按、拖移或者值更改)作出響應(yīng)。

例如,假設(shè)您想要在每次用戶輕按“恢復(fù)默認(rèn)”按鈕(在用戶界面中創(chuàng)建)時(shí)恢復(fù)應(yīng)用程序中的默認(rèn)設(shè)置。首先,您需要實(shí)施操作 restoreDefaults: 來執(zhí)行恢復(fù)默認(rèn)設(shè)置的邏輯。接著,注冊(cè)按鈕的 Touch Up Inside 事件,將 restoreDefaults: 操作方法發(fā)送到實(shí)施該方法的視圖控制器。

http://wiki.jikexueyuan.com/project/ios-developer-library/images/target_action_2x.png" alt="" />

在 ToDoList 應(yīng)用程序中,您已經(jīng)使用過目標(biāo)-操作模式。當(dāng)用戶輕按 XYZAddToDoItemViewController 中的“完成”按鈕時(shí),會(huì)觸發(fā) unwindToList: 操作。在這種情況下,“完成”按鈕是發(fā)送信息的對(duì)象,目標(biāo)對(duì)象是 XYZToDoListViewController,操作信息是 unwindToList:,而觸發(fā)操作信息被發(fā)送的事件則是用戶輕按“完成”按鈕這一操作。目標(biāo)-操作是定義交互以及在應(yīng)用程序各部分之間發(fā)送信息的強(qiáng)大機(jī)制。

委托

委托是一種簡單而強(qiáng)大的模式。在此模式中,應(yīng)用程序中的一個(gè)對(duì)象代表另一個(gè)對(duì)象,或與另一個(gè)對(duì)象協(xié)調(diào)工作。授權(quán)對(duì)象保留對(duì)另一個(gè)對(duì)象(委托對(duì)象)的引用,并適時(shí)向委托對(duì)象發(fā)送信息。該信息會(huì)告訴事件的委托對(duì)象,授權(quán)對(duì)象即將處理或剛處理了某個(gè)事件。委托對(duì)象可能會(huì)對(duì)該信息作出如下響應(yīng):更新其本身或應(yīng)用程序中其他對(duì)象的外觀或狀態(tài),在某些情況下,它會(huì)返回一個(gè)值來反映待處理的事件該如何處理。

http://wiki.jikexueyuan.com/project/ios-developer-library/images/delegation_2x.png" alt="" />

委托模式不僅普遍用于既有的框架類,而且也可應(yīng)用在應(yīng)用程序的兩個(gè)自定對(duì)象之間。常見的設(shè)計(jì)是將委托作為一種手段,允許子視圖控制器將某些值(通常為用戶輸入的值)傳達(dá)到父視圖控制器。

目前您還沒有使用過委托,但是在“教程:添加數(shù)據(jù)”中,當(dāng)您將其他行為添加到 XYZToDoListViewController 類時(shí),這就是委托的示例。

在 iOS 應(yīng)用程序的開發(fā)過程中,會(huì)經(jīng)常遇到一些較為常見的設(shè)計(jì)模式,但它們只是冰山一角。隨著對(duì) Objective-C 學(xué)習(xí)的深入,您還會(huì)發(fā)現(xiàn)其他可在應(yīng)用程序中使用的設(shè)計(jì)模式。