設計模式可以解決常見的軟件工程問題。模式是抽象設計,而非代碼。采用一種設計,就是應用它的通用模式來滿足您的特定需求。不管是創(chuàng)建哪種類型的應用程序,最好能先了解框架中使用的基本設計模式。了解設計模式有助于更高效地使用框架,并且可讓您編寫的程序復用程度更高、擴展能力更強和更容易修改。
對于任何 iOS 應用程序而言,模型-視圖-控制器 (MVC) 都是一個優(yōu)秀設計的關鍵所在。MVC 會將應用程序中的對象分配給以下三種角色中的一種:模型、視圖或者控制器。在這種模式中,模型會記錄應用程序的數(shù)據(jù),視圖會顯示用戶界面并構成應用程序的內(nèi)容,而控制器則會管理您的視圖。通過響應用戶的操作并使用內(nèi)容填充視圖,控制器充當了模型和視圖二者之間通信的通道。
在構建 ToDoList 應用程序的過程中,您遵循的就是以 MVC 為中心的設計模式。在串聯(lián)圖中構建的界面組成了視圖層 XYZAddToDoItemViewController 和 XYZToDoListViewController 就是管理視圖的控制器。在添加數(shù)據(jù)中,您需要結合數(shù)據(jù)模型來處理應用程序中的視圖和控制器。在開始設計自己的應用程序時,很重要的一點就是以 MVC 為中心進行設計。
目標-操作從概念上講是一個簡單的設計:特定事件發(fā)生時,一個對象會向另一個對象發(fā)送信息。操作信息就是在源代碼中定義的選擇器,而目標(即接收信息的對象)則是能夠執(zhí)行該操作的對象(通常為視圖控制器)。發(fā)送操作信息的對象通常為控制,例如按鈕、滑塊或開關,它能夠觸發(fā)事件對用戶的交互操作(例如輕按、拖移或者值更改)作出響應。
例如,假設您想要在每次用戶輕按“恢復默認”按鈕(在用戶界面中創(chuàng)建)時恢復應用程序中的默認設置。首先,您需要實施操作 restoreDefaults: 來執(zhí)行恢復默認設置的邏輯。接著,注冊按鈕的 Touch Up Inside 事件,將 restoreDefaults: 操作方法發(fā)送到實施該方法的視圖控制器。
在 ToDoList 應用程序中,您已經(jīng)使用過目標-操作模式。當用戶輕按 XYZAddToDoItemViewController 中的“完成”按鈕時,會觸發(fā) unwindToList: 操作。在這種情況下,“完成”按鈕是發(fā)送信息的對象,目標對象是 XYZToDoListViewController,操作信息是 unwindToList:,而觸發(fā)操作信息被發(fā)送的事件則是用戶輕按“完成”按鈕這一操作。目標-操作是定義交互以及在應用程序各部分之間發(fā)送信息的強大機制。
委托是一種簡單而強大的模式。在此模式中,應用程序中的一個對象代表另一個對象,或與另一個對象協(xié)調(diào)工作。授權對象保留對另一個對象(委托對象)的引用,并適時向委托對象發(fā)送信息。該信息會告訴事件的委托對象,授權對象即將處理或剛處理了某個事件。委托對象可能會對該信息作出如下響應:更新其本身或應用程序中其他對象的外觀或狀態(tài),在某些情況下,它會返回一個值來反映待處理的事件該如何處理。
委托模式不僅普遍用于既有的框架類,而且也可應用在應用程序的兩個自定對象之間。常見的設計是將委托作為一種手段,允許子視圖控制器將某些值(通常為用戶輸入的值)傳達到父視圖控制器。
目前您還沒有使用過委托,但是在“教程:添加數(shù)據(jù)”中,當您將其他行為添加到 XYZToDoListViewController 類時,這就是委托的示例。
在 iOS 應用程序的開發(fā)過程中,會經(jīng)常遇到一些較為常見的設計模式,但它們只是冰山一角。隨著對 Objective-C 學習的深入,您還會發(fā)現(xiàn)其他可在應用程序中使用的設計模式。
更多建議: