zoukankan      html  css  js  c++  java
  • MVP框架模式

    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的优点:

    1. 将View与Model解耦,方便进行单元测试。
    2. 结构清晰,易于维护
    3. 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

  • 相关阅读:
    20190613 安装Anaconda
    20190613 一个SQL问题
    20190604 宠物引发的乱想
    windows下的vim打开文件乱码解决
    【题解】 「NOI2019」弹跳 KDT优化建图+最短路+剪枝+卡空间 LOJ3159
    【题解】 [AH/HNOI2017]单旋 LCT+splay
    【题解】 CF1400E Clear the Multiset 笛卡尔树+贪心+dp
    【题解】 CF1404C Fixed Point Removal 线段树+树状数组+带悔贪心
    【题解】 CF1251E2 Voting (Hard Version) 带悔贪心
    【题解】 CF1418G Three Occurrences hash+双指针+差分
  • 原文地址:https://www.cnblogs.com/tangZH/p/14092741.html
Copyright © 2011-2022 走看看