這里介紹MVP架構(gòu),我看了幾篇文章,MVP解釋的不清晰,上一篇中大佬的文章解析的比較可信
淺談 MVC、MVP 和 MVVM 架構(gòu)模式 這篇大佬的文章
1.MVP和MVC的比較
MVP 架構(gòu)模式是 MVC 的一個(gè)變種,MVC 與 MVP 之間的區(qū)別其實(shí)并不明顯。
兩者之間最大的區(qū)別就是 MVP 中使用 Presenter 對視圖和模型進(jìn)行了解耦,它們彼此都對對方一無所知,溝通都通過 Presenter 進(jìn)行。
MVP 中的視圖必須要將對應(yīng)的事件代理給 Presenter 執(zhí)行,MVC中一般都是Controller。
2. 被動(dòng)視圖
MVP有兩種常見的模式:Passive View 和 Supervsing Controller。
被動(dòng)視圖(Passive View):顧名思義,在該變種的架構(gòu)模式中,視圖層是被動(dòng)的,它本身不會(huì)改變自己的任何的狀態(tài),所有的狀態(tài)都是通過 Presenter 來間接改變的
- 當(dāng)視圖接收到來自用戶的事件時(shí),會(huì)將事件轉(zhuǎn)交給 Presenter 進(jìn)行處理;
- 被動(dòng)的視圖向外界暴露接口,當(dāng)需要更新視圖時(shí) Presenter 通過視圖暴露的接口更新視圖的內(nèi)容;
- Presenter 負(fù)責(zé)對模型進(jìn)行操作和更新,在需要時(shí)取出其中存儲(chǔ)的信息;
- 當(dāng)模型層改變時(shí),可以將改變的信息發(fā)送給觀察者 Presenter;
在 MVP 的變種被動(dòng)視圖中,模型的操作以及視圖的更新都僅通過 Presenter 作為中間人進(jìn)行。
2. 監(jiān)督控制器
與被動(dòng)視圖中狀態(tài)同步都需要顯式的操作不同,監(jiān)督控制器(Supervising Controller)就將部分需要顯式同步的操作變成了隱式的:
監(jiān)督控制器中,視圖層接管了一部分視圖邏輯,主要內(nèi)容就是同步簡單的視圖和模型的狀態(tài)。