對(duì)于3種設(shè)計(jì)模式,本人最為熟悉的是MVC,使用最多的也是MVC模式。后來(lái)又了解到另外兩種模式,不過(guò)并沒有實(shí)際使用過(guò)。在網(wǎng)上看到對(duì)MVVM和MVP這兩種模式的介紹以及與MVC之間的關(guān)系說(shuō)明的文章有很多,這里就說(shuō)一下自己對(duì)這三種模式的看法。
MVC模式:想必大多數(shù)對(duì)于這個(gè)模式并不陌生,因?yàn)樽畛跏褂玫脑O(shè)計(jì)模式就是MVC模式。而且這個(gè)設(shè)計(jì)模式被很多熱門框架所使用,比如Ruby on Rails,spring Framework,Apple iOS Development and ASP.NET MVC。MVC即Model-View-Controller。

Model代表了描述業(yè)務(wù)路邏輯,業(yè)務(wù)模型、數(shù)據(jù)操作、數(shù)據(jù)模型的一系列類的集合。這層也定義了數(shù)據(jù)修改和操作的業(yè)務(wù)規(guī)則。
View代表了UI組件。他只負(fù)責(zé)展示從controller接收到的數(shù)據(jù)。也就是把model轉(zhuǎn)化成UI。
Controll負(fù)責(zé)處理流入的請(qǐng)求。它通過(guò)View來(lái)接受用戶的輸入,之后利用Model來(lái)處理用戶的數(shù)據(jù),最后把結(jié)果返回給View。Controller就是View和Model之間的一個(gè)協(xié)調(diào)者。
它們之間的通信模式如下:

MVP模式:這個(gè)模式把P(Presenter)換成C(Controller)就和MVC很像了。MVP即Model-View-Presenter。
通信模式如下:

1. 各部分之間的通信,都是雙向的。
2. View 與 Model 不發(fā)生聯(lián)系,都通過(guò) Presenter 傳遞。
3. View 不部署任何業(yè)務(wù)邏輯,稱為"被動(dòng)視圖",即沒有任何主動(dòng)性,所有邏輯都部署在Presenter那里。
MVP模式關(guān)鍵點(diǎn):
1.用戶和View交互。
2.View和Presenter是一對(duì)一關(guān)系。意味著一個(gè)Presenter只映射一個(gè)View。
3.View持有Presenter的引用(個(gè)人猜測(cè):應(yīng)該是通過(guò)接口交互,并不直接引用Presenter),但是View不持有Model的引用(個(gè)人猜測(cè):即使接口,也不會(huì))。
MVVM模式:將Presenter換成ViewModel,基本上與MVP模式一致。唯一的區(qū)別是,它采用雙向綁定:View的變動(dòng),自動(dòng)反映在 ViewModel,反之亦然。

MVVM模式關(guān)鍵點(diǎn):
1.用戶和View交互。
2.View和ViewModel是多對(duì)一關(guān)系。意味著一個(gè)ViewModel只映射多個(gè)View。
3.View持有ViewModel的引用,但是ViewModel沒有任何View的信息。
4.View 和ViewModel之間有雙向數(shù)據(jù)綁定關(guān)系。