MVC、MVP、MVVM模式想必很多程序员都听说过,今天我简单介绍下MVP的使用。
并附上demo地址:
https://github.com/linqinen708/SimpleMvpDemo
想要了解MVP模式,首先需要了解MVC模式,因为MVP模式就是由MVC演化而来的。做过IOS开发的人应该不陌生,IOS的新建默认项目会自动使用MVC模式,并且还专门建立好了Model、View和Controller三个文件夹。而Android Studio的默认项目基本上没有任何模式,需要程序员自己来建立。在Android的开发中,最为经典并且简单的MVC模式,可以说是View控件本身自带的OnClickListener了(不知道这个比喻恰不恰当)。Controller就是整个Listener,而Model就是onClick的回调中的方法,这样一个简单的MVC模式就形成了。而如果我们通过封装,将这个Listener封装成一个单独的类,这样就可以大大降低Activity中的代码,也便于后期的维护。整个Activity就是一个View,被封装的Listener的类就是一个Presenter,onClick中的事件的处理再单独封装成一个Model类,就是一个简单的MVP类了。想要使用Model中的逻辑或者数据,直接使用Presenter中的自定义的接口回调即可。
同理,下面我用平常我们最常使用的HTTP的请求方式作为对象,来简单的做一个MVP模式的介绍:
首先要创建一个Presenter类,用来封装所有的请求操作,然后再创建一个Callback接口,用来回调在Presenter中的处理完毕后的结果数据,处理的过程则封装在Model类中,当处理完毕后将Model数据回调给Activity进行展示:
Activity类
public class SimpleActivity extends AppCompatActivity implements SimpleCallback {
private SimplePresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple);
//创建一个presenter
presenter = new SimplePresenter();
}
@Override
public void httpCallback(SimpleModel model) {
//将得到的数据进行展示
TextView textView = findViewById(R.id.tv_name);
textView.setText( model.getName());
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn:
//http请求数据
presenter.httpRequeset(this);
break;
default:
break;
}
}
}
Presenter类
public class SimplePresenter {
public void httpRequeset(SimpleCallback simpleCallback){
//这里触发了http的请求代码,得到了姓名:张三
//******这部分代码可以封装到Model类中
SimpleModel model = new SimpleModel();
model.setName("张三");
//然后将得到的结果回调给Activity
simpleCallback.httpCallback(model);
}
}
Callback回调
public interface SimpleCallback {
void httpCallback(SimpleModel model);
}
Model类
public class SimpleModel {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这样一个简单的MVP模式就产生了,但是如果我们有很多个Activity,每次都这么创建,就很繁琐,所以要进行简单的封装,比如所有的Activity继承自己的BaseActivity中,同理Presenter也继承自己的BasePresenter中,使用起来就会方便很多。封装的例子我已经在demo中写好,仅供参考,小伙伴们可以根据自己的需求自定义封装。
注意事项:因为Presenter与Activity是绑定的关系,所以当Activity销毁的时候,需要将Presenter置空
MVVM模式可以参考我的另外一篇文章,强烈推荐能力允许的情况下,在Android开发中用MVVM模式,你会爱上它的
MVVM模式的运用:https://blog.csdn.net/qq_33337504/article/details/79037181#commentsedit