Android开发之MVP

吃可爱长大的小学妹 提交于 2020-03-25 20:15:04

3 月,跳不动了?>>>

MVP:Model,View和Presenter

作用:分离VIew和Model,通过接口实现VIew和Presenter的交互,有利于单元测试,同时较少Activity的代码,Presenter分担原来在Activity实现的逻辑代码。

代码实现:

1,定义IView和IPresenter

public interface IView {

    Activity getActivity();

}
public interface IPresenter {

    void detachView();

}

2,定义BaseView(BaseActivity和BaseFragment)和BasePresenter,分别集成IView和IPresenter

public abstract class BaseView<P extends IPresenter> extends Activity implements IView {

    protected P prosenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        prosenter = bindPresenter();
    }

    protected abstract P bindPresenter();

    @Override
    public Activity getActivity() {
        return this;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (prosenter != null) prosenter.detachView();
    }
}

public class BasePresenter<V extends IView> implements IPresenter {

    protected Reference<V> MvpView;

    public BasePresenter(V view) {
        MvpView = new WeakReference<>(view);
    }

    protected V getView() {
        if (MvpView != null) {
            return MvpView.get();
        }
        return null;
    }

    protected boolean isAttach() {
        return MvpView != null && MvpView.get() != null;
    }

    @Override
    public void detachView() {
        if (MvpView != null) {
            MvpView.clear();
            MvpView = null;
        }
    }
}

3,MainActivity和MainPresenter开始使用,在使用之前先创建MainContacts类来管理MVP

public class MainContact {

    public interface ILogMode<T> {
        void login(String name, String pwd, IModelResultListenet<T> backListenet);
    }

    public interface ILogView extends IView {
        void success(boolean isSuccess);
    }

    public interface ILogPresenter extends IPresenter{
        void login(String name, String pwd);
    }

}

public class MainActivity extends BaseView<MainPresenter> implements MainContact.ILogView {

    @Override
    public void success(boolean isSuccess) {

    }

    @Override
    protected MainPresenter bindPresenter() {
        return new MainPresenter(this);
    }

    void init() {
        prosenter.login("", "");
    }
}

public class MainPresenter extends BasePresenter<MainContact.ILogView> implements MainContact.ILogPresenter {

    LogModel mLogModel;

    public MainPresenter(MainContact.ILogView view) {
        super(view);
        mLogModel = new LogModel();
    }

    @Override
    public void login(String name, String pwd) {
        if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(pwd)) {
            mLogModel.login(name, pwd, new IModelResultListenet<String>() {

                @Override
                public void onSuccess(String o) {
                    getView().success(true);
                }

                @Override
                public void onFailure() {
                    getView().success(false);
                }
            });
        } else {

        }
    }
}

public class LogModel implements MainContact.ILogMode<String> {

    @Override
    public void login(String name, String pwd, IModelResultListenet<String> backListenet) {
        if (name.equals(pwd)) {
            backListenet.onSuccess(null);
        } else {
            backListenet.onFailure();
        }
    }
}

//Model回调
public interface IModelResultListenet<T> {

    void onSuccess(T t);

    void onFailure();

}

就这样一个MVP就体现出来了

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!