相信大家對 MVC 都是比較熟悉了:M-Model-模型、V-View-視圖、C-Controller-控制器,MVP作為MVC的演化版本,也是作為用戶界面(用戶層)的實現模式,那么類似的MVP所對應的意義:M-Model-模型、V-View-視圖、P-PResenter-表示器。
MVC詳見博客: Android之MVC模式的使用
Model 是用戶界面需要顯示數據的抽象,也可以理解為從業務數據(結果)那里到用戶界面的抽象。
視圖這一層體現的很輕薄,負責顯示數據、提供友好界面跟用戶交互就行。MVP下Activity和Fragment體現在了這一層,Activity一般也就做加載UI視圖、設置監聽再交由Presenter處理的一些工作,所以也就需要持有相應Presenter的引用。
Presenter這一層處理著程序各種邏輯的分發,收到View層UI上的反饋命令、定時命令、系統命令等指令后分發處理邏輯交由業務層做具體的業務操作,然后將得到的 Model 給 View 顯示。
MVC和MVP的區別
在 MVC 中:
View 可以與 Model 直接交互;Controller 可以被多個 View 共享;Controller 可以決定顯示哪個 View 。在 MVP 中:
View 不直接與 Model 交互;Presenter 與 View 通過接口來交互,更有利于添加單元測試;通常 View 與 Presenter 是一對一的,但復雜的 View 可能綁定多個 Presenter 來處理;Presenter 也可以直接進行 View 上的渲染。模仿登錄案例:(demo中包含登錄和網絡數據請求)
model
public class ModelSignIn implements ILoginSignIn { @Override public void onSignIn(String name, String pwd, IOnSetListenter listenter) { if (name.isEmpty()) { if (listenter!=null) { listenter.onError("輸入用戶名為空"); return; } } if (pwd.isEmpty()) { if (listenter!=null) { listenter.onError("輸入密碼為空"); return; } } if(name.equals("dickyqie") && pwd.equals("123456")) { if (listenter!=null) { listenter.onError("登錄成功"); return; } }else{ if (listenter!=null) { listenter.onError("登錄失敗"); return; } } }}presenter
<uses-permission android:name="android.permission.INTERNET"/>新聞熱點
疑難解答