原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:關(guān)東升的博客
MVC(Model-View-Controller,模型-視圖-控制器)模式是相當(dāng)古老的設(shè)計(jì)模式之一,它最早出現(xiàn)在Smalltalk語言中?,F(xiàn)在,很多計(jì)算機(jī)語言和架構(gòu)都采用了MVC模式。
MVC模式概述
MVC模式是一種復(fù)合設(shè)計(jì)模式,由 “觀察者”(Observer)模式、“策略”(Strategy)模式和“合成”(Composite)模式等組成。MVC模式由3個(gè)部分組成,如圖所示,這3個(gè)部分的作用如下所示。
? 模型。保存應(yīng)用數(shù)據(jù)的狀態(tài),回應(yīng)視圖對(duì)狀態(tài)的查詢,處理應(yīng)用業(yè)務(wù)邏輯,完成應(yīng)用的功能,將狀態(tài)的變化通知視圖。
? 視圖。為用戶展示信息并提供接口。用戶通過視圖向控制器發(fā)出動(dòng)作請(qǐng)求,然后再向模型發(fā)出查詢狀態(tài)的申請(qǐng),而模型狀態(tài)的變化會(huì)通知給視圖。
? 控制器。接收用戶請(qǐng)求,根據(jù)請(qǐng)求更新模型。另外,控制器還會(huì)更新所選擇的視圖作為對(duì)用戶請(qǐng)求的回應(yīng)??刂破魇且晥D和模型的媒介,可以降低視圖與模型的耦合度,使視圖和模型的權(quán)責(zé)更加清晰,從而提高開發(fā)效率。

對(duì)應(yīng)于哲學(xué)中的“內(nèi)容”與“形式”, 在MVC模型中,模式是“內(nèi)容”,它存儲(chǔ)了視圖所需要的數(shù)據(jù),視圖是“形式”,是外部表現(xiàn)方式,而控制器是它們的媒介。
Cocoa Touch中的MVC模式
上面我們討論的是通用的MVC模式,而Cocoa和Cocoa Touch框架中的MVC模式與傳統(tǒng)的MVC模式略有不同,前者的模型與視圖不能進(jìn)行任何通信,所有的通信都是通過控制器完成的,如圖所示。

在Cocoa Touch框架的UIKit框架中,UIViewController是所有控制器的根類,如UITableViewController、UITabBarController和UINavigationController。UIView是視圖和控件的根類。