前言
1. MVP模式
MVP:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
简单点来说,MVP分离了view和model层,Presenter层充当了桥梁的角色,View层只负责更新界面即可,这里的View我们要明白只是一个viewinterface,它是视图的接口,这样我们在做单元测试的时候可以非常方便编写Presenter层代码。
- 好处:
- 模型与视图完全分离,我们可以修改视图而不影响模型
- 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
- 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
- 如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)
2. 使用方法
实现一个简单的网络请求
- Contract
interface Model extends BaseModel {
Flowable<TestBean> postLogin();
}
interface View extends BaseView {
}
abstract class Presenter extends BasePresenter<Model, View> {
public abstract void login();
}
}
- Model
@Override
public Flowable<TestBean> postLogin() {
return Api.getDefault().getListDict().compose(RxSchedulers.<BaseResponse<TestBean>>io_main()).compose(RxSchedulers.<TestBean>handleResult());
}
}
- Presenter
@Override
public void login() {
addDispose(mModel.postLogin().subscribeWith(new RxSubscriber<TestBean>(mContext, false) {
@Override
protected void _onNext(TestBean userBaseRespose) {
Log.e(TAG, userBaseRespose.toString());
}
@Override
protected void _onError(String message) {
mView.showErrorTip(message);
Toast.makeText(mContext,message,Toast.LENGTH_SHORT).show();
}
}));
}
}
- Activity
mPresenter.login();