- 简称:MVP 全称:Model(模型)-View(视图)-Presenter(表示层) ;
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:
Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。 - Model:model的工作就是完成具体的业务操作(网络请求,数据库的操作)
Presenter:presenter的作为桥梁,将view和model的具体实现连接起来
View:view是所需要实现的视图
- Mvp产生的原因:专门优化Activity和Fragment产生的
- Mvp的优点:View层和Model层不知相互可知,完全解耦,
取而代之的是presenter的层充当了桥梁的作用,
view层发出的事件传递到Presenter层,presenter层操作model层,
model层将处理完的数据返还给Presenter层,Presenter层将结果在返回给View层
整个过程中View层和Model层完全没有关系 - 登录实例—三个接口:
-
/* *Send_View_Message 是一个接口 * 处理完数据后 将结果返回给这个接口 * number 用户账号 * word 用户密码 */ interface Model { //modle 层的接口 void getLoginView(Send_View_Message view, String number, String word); } /** * user_string 处理完的结果接口 */ interface View { //view 层的接口 void getUserBean(String user_string); } /** * * number 用户账号 * word 用户密码 */ interface Presenter { //presenter 的接口 void sendRetrofit(String number,String word); } /** * user_string 返回的结果 */ interface Send_View_Message{ //model 处理完数据后 返回给这个接口 void getString(String user_string); }
-
三个接口的实例化对象
view层的实例化对象是对应的Activity或Fragment 实现View的接口(注意包) //创建p层 login_presenter = new Login_Presenter(this);
//调用p层中的方法 login_presenter.sendRetrofit(numbe r,word); //重写接口中的方法
/** * @param user_string mvp处理完的接口回掉 */ @Override public void getUserBean(String user_string) { //请求完的结果 在此方法中更新UI Log.i("login",user_string); }
-
三个接口的实例化对象 presenter的实例化接口
public class Login_Presenter implements Login_Contract.Presenter { Login_Contract.View view; Login_Contract.Model model; /** * 创建p层时 p层持有V层和M层 * @param view 创建P层时传过来的V层实例化对象 */ public Login_Presenter(Login_Contract.View view) { //将V取出来 this.view=view; model=new Login_Model(); } /** * 调用P层的sendRetrofit方法时 操作model层做业务处理 * @param number 用户名 * @param word 密码 */ @Override public void sendRetrofit(String number, String word) { /** * model层操作完之后 讲结果返回给当前接口 */ model.getLoginView(new Login_Contract.Send_View_Message() { @Override public void getString(String user_string) { //获取到返回的数据 将结果返回给view层 view.getUserBean(user_string); } }, number, word); } }
-
三个接口的实例化对象 presenter的实例化接口
public class Login_Model implements Login_Contract.Model { @Override public void getLoginView(Login_Contract.Send_View_Message view, String number, String word) { if("123".equals(number) && "abc".equals(word)){ //为接口赋值 view.getString("登录成功"); }else{ //为接口赋值 view.getString("登录失败"); } } }
-
此时:v层创建p层(p层获取到了v层和m层的实例化对象) v层调用p层中的方法 p层中的这个方法调用了m层的方法 m层做业务处理 ,处理完之后通过接口返回给P层 p层在给v层的接口赋值 这时--》v层的实现类(就是我们的Activity或Fragment) 重写接口中的方法就会收到处理完的结果 我们在此方法中更新UI
-
我们要根据我们项目的自身需求 来编写不同写法 希望大家不要被具体的代码所困住。
经典标准MVP
最新推荐文章于 2018-12-18 01:25:18 发布