MVP设计模式
Contract: 视图层 业务层 数据层 需要被实现的接口,方便查看业务逻辑
视图层只操作视图:显示 隐藏 变化
业务层处理逻辑:数据初始化 各类判断
数据层处理数据的请求和获取
public interface LoginContract {
/**
* 界面层提供的接口
* */
interface LoginView extends IBaseView {
}
/**
* 业务层提供的接口
* */
interface LoginPresenter {
}
/**
* 数据层提供的接口
* */
interface LoginModel {
}
}
View : 视图层 一般就是Activity
public class LoginActivity extends MvpBaseActivity<LoginPresenter> implements LoginContract.LoginView, View.OnClickListener {}
MvpBaseActivity :单独封装的BaseActivity
MvpBaseActivity 中的执行流程:
public abstract class MvpBaseActivity<P extends MvpBasePersenter> extends BaseActivity implements IBaseView {
public final String TAG = this.getClass().getSimpleName();
protected P mPresenter;
public MvpBaseActivity() {
}
protected abstract P createPresenter(Bundle var1);
protected abstract int createContentView(Bundle var1);
protected abstract void bindViews(Bundle var1);
protected abstract void bindListeners(Bundle var1);
protected abstract void initViews(Bundle var1);
@CallSuper
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.mPresenter = this.createPresenter(savedInstanceState);
this.mPresenter.attach(this);
this.mPresenter.onCreate(savedInstanceState);
if (this.mPresenter.startCreate(savedInstanceState)) {
this.startCreate(savedInstanceState);
}
}
protected void startCreate(Bundle savedInstanceState) {
Intent intent = this.getIntent();
if (intent != null) {
this.mPresenter.onIntent(intent);
Bundle bundle = intent.getExtras();
if (bundle != null) {
this.mPresenter.onExtras(bundle);
}
}
this.setContentView(this.createContentView(savedInstanceState));
this.bindViews(savedInstanceState);
this.initViews(savedInstanceState);
this.bindListeners(savedInstanceState);
this.mPresenter.onViewCreated(savedInstanceState);
}
protected void onStart() {
super.onStart();
this.mPresenter.onStart();
}
protected void onResume() {
super.onResume();
this.mPresenter.onResume();
}
protected void onPause() {
super.onPause();
this.mPresenter.onPause();
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
this.mPresenter.onSaveInstanceState(outState);
}
protected void onStop() {
super.onStop();
this.mPresenter.onStop();
}
protected void onDestroy() {
super.onDestroy();
this.mPresenter.detachView();
this.mPresenter.onDestroy();
this.mPresenter = null;
}
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (this.mPresenter != null) {
if (intent != null) {
this.mPresenter.onNewIntent(intent);
Bundle bundle = intent.getExtras();
if (bundle != null) {
this.mPresenter.onNewExtras(bundle);
}
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (this.mPresenter != null) {
this.mPresenter.onActivityResult(requestCode, resultCode, data);
}
}
public void finish() {
super.finish();
}
public boolean isActive() {
return !this.isFinishing();
}
}
可以看到先去初始化p层
一切数据传递可以先在P层去处理 ,然后再初始化Activity视图,比如绑定组件,注册监听
Activity绑定组件完毕后,p层执行 onViewCreated 可以在里面处理一些初始化
最后 Activity 走本身的onCreate方法
注意:onCreate(Bundle savedInstanceState) 是一个参数的
业务层 XXXPresenter
public class LoginPresenter extends MvpBasePersenter<LoginContract.LoginView> implements LoginContract.LoginPresenter {}
以数据同步页面 Presenter 举例
可以在 onViewCreated 去初始化 Provider (调用其他模块提供的接口)以及loadData()
处理完成后调用view 层接口方法
数据层 Model
对数据的请求 获取
/**
* 登录的数据访问
*/
public class LoginModel implements LoginContract.LoginModel {
@Override
public void loginByAccount(String userName, String password,RequestSateListener<LoginResponse> callback) {
LoginByAccountRequest loginByAccountRequest = new LoginByAccountRequest();
loginByAccountRequest.setUserName(userName);
loginByAccountRequest.setPassword(password);
LoginWebManagerImpl.loginByAccount(Utils.getApp(), url, loginByAccountRequest, callback);
}
``