Android MVP模式实战教程

  

<强>一、什么是MVP

  

在网上找了些资料,整理如下:

  

MVP是模型(模型),视图(视图),主持人(主持人)的缩写,分别代表项目中3个不同的模块。

  

模型(模型):负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等;
  视图(查看):负责界面数据的展示,与用户进行交互;
  主持人(主持人):相当于协调者,是模型与视图之间的桥梁,将模型与视图分离开来。

  

如下图所示,视图与模型并不直接交互,而是使用主持人作为视图与模型之间的桥梁。其中主持人中同时持有另外层以及模型层的界面的引用,而视图层持有主持人层界面的引用。当视图层某个界面需要展示某些数据的时候,首先会调用主持人层的某个接口,然后主持人层会调用模型层请求数据,当模型层数据加载成功之后会调用主持人层的回调方法通知主持人层数据加载完毕,最后主持人层再调用视图层的接口将加载后的数据展示给用户。这就是MVP模式的整个核心过程。

  

 Android MVP模式实战教程

  

在MVP模式里通常包含4个要素:

  

,,,,(1)观点:负责绘制界面元素,与用户进行交互(在Android中体现为活动),
  ,,,,(2)视图界面:需要查看实现的接口,看通过视图界面与主持人进行交互,降低耦合,方便进行单元测试。
  ,,,,(3)模型:负责存储,检索,操纵数据(有时也实现一个模型接口用来降低耦合),
  ,,,,(4)推荐者:作为视图与模型交互的中间纽带,处理与用户交互的负责逻辑。

  

 Android MVP模式实战教程

  

<强>二,MVP模式的使用

  

 Android MVP模式实战教程

  

上面一张简单的MVP模式的UML图,从图中可以看的出,使用MVP,至少需要经历以下步骤:
  

  

1。创建向iprensenter接口,把所有业务逻辑的接口都放在这里,并创建它的实现PresenterCompl(在这里可以方便地查看业务功能,由于接口可以有多种实现所以也方便写单元测试)

  

2。创建IView接口,把所有视图逻辑的接口都放在这里,其实现类是当前的活动/片段

  

3。由UML图可以看的出,活动里包含了一个向iprensenter,而PresenterCompl里又包含了一个IView并且依赖了Model.Activity里只保留对向iprensenter的调用,其它工作全部留到PresenterCompl中实现

  

4。模型并不是必须有的,但是一定会有观点和主持人
  

  

<强>三,一个简单的MVP示例

  

实现一个简单的用户登录

  

效果如下:

  

 Android MVP模式实战教程

  

先来看看java文件的目录结构:

  

 Android MVP模式实战教程

  

  

出发         包com.example.mvpe.bean;/* *   *由fendo>   包com.example.mvpe.model;      进口com.example.mvpe.bean.UserBean;/* *   *由fendo>   包com.example.mvpe.model;      进口android.provider.Settings;   进口android.util.Log;   进口android.util.SparseArray;      进口com.example.mvpe.bean.UserBean;/* *   *由fendo;   私人字符串的用户名;   私人字符串userpwd;   私人int sid;   私人SparseArray苏=new SparseArray ();      @Override   公共空间setSid (int cid) {   sid=cid;   }      @Override   公共出发负载(int sidy) {   sid=sidy;   出发乌兰巴托=苏。get (sid,新的出发(“没有找到”,   “没有找到”));   返回乌兰巴托;   }         @Override   公共空间setUsername(字符串usernamey) {   用户名=usernamey;   }      @Override   公共空间setUserpwd(字符串userpwdy) {   userpwd=userpwdy;   出发usb=new出发(用户名、userpwd);   System.out.print(用户名+“- - - - -”+ userpwd +“- - - - -”+ sid);   Log.d (UserModelimp。Start_OK“ACTIVITY_TAG +用户名+“- - - - -”+ userpwd +“- - - - -”+ sid);   su.append (sid, usb);   }   }      之前      

  

UserPersenter类      

Android MVP模式实战教程