MVP模式是MVC的一個演化版本,全稱為:Model View Presenter
MVP會解除View與Model的耦合,分離顯示層與邏輯層,他們之間通過介面進行通訊,降低耦合,
1、Presenter-------互動中間人
溝通View與Model的橋梁,它從Model層檢索出資料后回傳給View層,使得View與Model之間沒有耦合,
2、View---------用戶界面
View通常是指Activity、Fragment或者某個View控制元件,它含有一個Presenter成員變數,通常View需要實作一個邏輯介面,將View上的操作轉交給Presenter進行實作,最后presenter通過呼叫View邏輯介面將結果回傳給View元素,
3、Model-------資料的存取
負責資料的存取,Presenter通過Model層存盤獲取資料,Model就像一個資料倉庫,更直白得說,Model是封裝了資料庫DAO或者網路獲取資料得角色,或著兩種方式獲取資料的集合,

MVP的優點:
- 將View與Model解耦,方便進行單元測驗,
- 結構清晰,易于維護
- activity和fragment不再是controller層,而是純粹的view層,
MVP缺點:
1、類與介面將會增多,增加了代碼量
2、每個功能都得新增介面,presenter難以復用,比如該頁面有許多網路請求,每個網路請求都得新增一個介面,后面新增一個頁面發現只需要一個跟上個頁面一樣的介面,這時候如果復用上一個頁面的presenter,那么就得實作其它用不到 的介面,
代碼例子:
1、建立Contract(presenter與Activity需要繼承的介面,IBasePresenter和IBaseLoadListView為基礎的介面)
public interface AllGroupMemberContract { interface Presenter extends IBasePresenter { void getGroupUserList(boolean firstLoad, String groupId); } interface View extends IBaseLoadListView<GroupUserOuterClass.GroupUser> { void getList(List<GroupUserOuterClass.GroupUser> list); } }
2、建立ViewModel---------->GroupHttpAPi
3、建立presenter,AbsPresenter為基類,
public class AllGroupMemberPresenter extends AbsPresenter implements AllGroupMemberContract.Presenter { private AllGroupMemberContract.View view; private List<GroupUserOuterClass.GroupUser> list = new ArrayList<>(); public AllGroupMemberPresenter(AllGroupMemberContract.View view) { this.view = view; } @Override public void getGroupUserList(boolean firstLoad, String groupId) { list = GroupHttpAPi.getInstance().getGroupUserList(groupId) view.getList(list) } }
4、activity繼承AllGroupMemberContract.View
public class AllGroupMemberActivity extends BaseActivity implements AllGroupMemberContract.View { AllGroupMemberPresenter presenter = new AllGroupMemberPresenter(this); @Override public void getList(List<GroupUserOuterClass.GroupUser> list) { } } public getData() { presenter.getGroupUserList(firstPage, groupId); } }
activity呼叫presenter的getGroupUserList方法,presenter呼叫ViewModel的方法,然后通過介面傳給Activity
轉載請表明:https://www.cnblogs.com/tangZH/p/14092741.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/296450.html
標籤:其他
下一篇:全域字體設定 || 老年模式
