MVP设计模式实践

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);
    }
``
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值