关于MVP的一些简单了解

一:MVP的认知:

m : model 模型(数据)

v : view 视图(显示)

c : control 控制(逻辑)

p: persenter 表示业务,接显示和模型处理数据也视图的关系

步骤:1.activity中创建persenter对象,实现view接口,向persenter下达操作命令

2.persenter类继承persenter接口实现类(实现类主要处理一些基本逻辑),创建model对象,传入自身实例,调用model中的逻辑方法

3.model则实现读取本地数据库相关的操作,操作中通过persenter向view更新进度。

这里写图片描述

扩展:MVC与MVP

这里写图片描述

区别:MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的。

二:代码

Model 层
1 、状态以及数据返回的定义
public interface IModelCallback {
/**
* 开始
*/
void onStart();
/**
* 处理成功
* @param data
*/
void onSuccess(String data);
/**
* 处理失败
* @param msg
*/
void onFail(String msg);
/**
* 处理出现异常
*/
void onError();
/**
* 处理完毕
*/
void onComplete();
}
2 、具体的数据加载
/**
* 数据处理类
*/
public class MyModel1 {
private Handler m = new Handler();
public void loadData(final int par,final IModelCallback callback){
callback.onStart();
new Thread(){
@Override
public void run() {
try {
Thread.sleep(1000);
if(par < 0){
m.post(new Runnable() {
@Override
public void run() {
callback.onFail(” 参数非法错误 “);
}
});
}else {
final String data = ” 加载了 ” + par + ” 条数据 “;
m.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(data);
}
});
}
} catch (InterruptedException e) {
e.printStackTrace();
m.post(new Runnable() {
@Override
public void run() {
callback.onError();
}
});
}
m.post(new Runnable() {
@Override
public void run() {
callback.onComplete();
}
});
}
}.start();
}
}
view 层
1 、结合数据加载情况处理页面效果
public interface IView {
/**
* 显示加载框
*/
void showLoadingDialog();
/**
* 显示数据结果
* @param data
*/
void showResult(String data);
/**
* 显示加载失败的提醒
* @param msg
*/
void showFailMsg(String msg);
/**
* 显示加载异常的提醒
*/
void showErrorMsg();
/**
* 隐藏加载框
*/
void hideLoadingDialog();
}
Persenter 层
承上启下
public class MyPersenter1 {
private IView iView;
public MyPersenter1(IView iView) {
this.iView = iView;
}
public void getData(int par) {
MyModel1 model1 = new MyModel1();
model1.loadData(par, new IModelCallback() {
@Override
public void onStart() {
iView.showLoadingDialog();
}
@Override
public void onSuccess(String data) {
iView.showResult(data);
}
@Override
public void onFail(String msg) {
iView.showFailMsg(msg);
}
@Override
public void onError() {
iView.showErrorMsg();
}
@Override
public void onComplete() {
iView.hideLoadingDialog();
}
});
}
}

猜你喜欢

转载自blog.csdn.net/sinat_42217141/article/details/81178319