概要
对于mvp模式,大家都知道是由mvc演变而来的,对于MVC大家都知道
- M Model(用于存放实体模型与业务逻辑)
- V View(存放布局和资源文件)
- C Control(存放Activity)
对于mvc中的view在android中的功能就比较弱化了并且在Control中的activity中我们在实际开发中经常都是上千行代码,经常都是将对一些点击时间的处理和一些逻辑都放在activity中,这样就造成了activity很臃肿,并且这样对于activity在mvc中处于View与Control之间 这个尴尬的位置
对于mvp模式的出现则挽回了activity在mvc中的尴尬局面,mvp主要为
- M Model(存放数据模型与业务逻辑)
- V View(存放activity 已经一些自定义的View)
- P Presenter(主要负责View与Model的交互)
我们可以看到mvc由mvp的转化主要将Control换成了Presenter,由Presenter来处理activity中的逻辑和与Model层的交互
总结
其实对于mvc转换到mvp我们可以用下面的两张图来解释一下
mvc模式
mvp模式
我们可以看出上面的两张图,由activity直接向Model层通信,转化到 View层通过Presenter层向 Model的数据类型通信,这样可以明显的看出很大程度降低了程序的耦合度,废话也不多说了,下面我们用一个提交信息的例子来让大家更直观的理解mvp
实战
下面我用一个简单的提交信息的例子来说明下mvp在这个例子是怎么用的,下面是示例图
下面是项目的整个结构
我们可以看出我们在MainActivity中的一些逻辑性的代码全都通过MainActiityPresenterCompl来实现,由他直接向Model层通信
下面是代码
信息模型
/**
* Created by blue on 2016/10/15.
*/
public class UserInfo {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
private String age;
private String name;
private String gender;
private String hobby;
}
presenter的接口
package com.mvpdemo.blue.mvpdemo.presenter.ipresenter;
import android.content.Context;
import android.widget.EditText;
import<