美文网首页
Android基础之简单MVP架构

Android基础之简单MVP架构

作者: 南风知我咦 | 来源:发表于2023-04-03 21:21 被阅读0次

资料

MVP模式的经典封装

自己封装的思路

  • 啥思路啊,就是看别人的照着写呗。哈哈哈

首先是各种基础的接口,一般提供通用方法。

IMode
public interface IMode {
    void load();
}
IView
public interface IView {
    void onSuccess(Object...objects);
    void onError();
}
IPresenter

public interface IPresenter{
    void detachView();
}
然后是针对View的二次封装
  • 这次是为了基础基类的通用方法做一个封装
public interface BaseView extends IView {
    void initView();
    void initButton();
    void initData();
    void showProgress();
    void dismissProgress();
}
然后是Presenter的二次封装
public abstract class BasePresenter<V extends IView,M extends IMode> implements IPresenter {

    protected M mode;
    protected WeakReference<V> weakReference;

    public void attachView(V iView) {
        weakReference = new WeakReference<>(iView);
    }

    public BasePresenter(V v) {
        attachView(v);
    }

    public V getView() {
        if (weakReference != null)
            return weakReference.get();
        else return null;
    }

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

    public boolean isViewAttach() {
        return weakReference != null && weakReference.get() != null;
    }
}
然后是Activity的基类的封装
  • 其实可以更丰富的,比如点击事件的控制,返回键的控制等等。
public abstract class NewBaseActivity<P extends BasePresenter> extends AppCompatActivity implements BaseView{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        presenter = createPresenter();
        initData();
        initView();
        initButton();
    }

    protected P presenter;

    protected abstract P createPresenter();

    @Override
    public void initView() {

    }

    @Override
    public void initButton() {

    }

    @Override
    public void initData() {

    }

    @Override
    public void showProgress() {
        //...展示弹窗
    }

    @Override
    public void dismissProgress() {
        //...隐藏
    }
}

基础打好了,现在看是在业务中使用了。

  • 这里随便命名了。
首先是UsbContract类
  • 这个类是放接口的地方,主要是接口集中,方便查看代码和业务。方便查看接口都有那些,干了什么。
public class UsbContract {

//这个用来调用业务逻辑后回调给View层
    interface UsbView extends BaseView{
        void connectSuccess();
        void connectFail();
    }

//这个是Mode层方法的接口类
    interface UsbMode extends IMode{
        void connect(Callback callback);
    }

//这个是业务层完成后回调到presenter层
   public interface Callback{
        void onSuccess();
        void onError();
        void onInterrupt();

        void onComplete();
    }
}
业务层UsbMode
public class UsbMode implements UsbContract.UsbMode{

    @Override
    public void load() {

    }

    @Override
    public void connect(UsbContract.Callback callback) {
        try{
            callback.onSuccess();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            callback.onComplete();
        }
    }
}
中间层UsbPresenter
public class UsbPresenter extends BasePresenter<UsbContract.UsbView,UsbContract.UsbMode> implements IPresenter {

    public UsbPresenter(UsbContract.UsbView usbView) {
        super(usbView);
        mode = new UsbMode();
    }

    void connect(){
        getView().showProgress();
        mode.connect(new UsbContract.Callback() {
            @Override
            public void onSuccess() {
                getView().onSuccess("成功了",1);
            }

            @Override
            public void onError() {
                getView().onError();
            }

            @Override
            public void onInterrupt() {
                getView().onError();
            }

            @Override
            public void onComplete() {
                getView().dismissProgress();
            }
        });
    }
}
View层
public class UsbActivity extends NewBaseActivity<UsbPresenter> implements UsbContract.UsbView {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        presenter.connect();
    }

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

    @Override
    protected UsbPresenter createPresenter() {
        return new UsbPresenter(this);
    }

    @Override
    public void onSuccess(Object... objects) {

    }

    @Override
    public void onError() {

    }

    @Override
    public void connectSuccess() {

    }

    @Override
    public void connectFail() {

    }
}

完了

  • 整个过程就是在view中实例化Presenter,需要传入View的对象,同时会实例化Mode。
  • Presenter同时持有View和Mode的引用,然后通过套娃回调来通知请求结果。

相关文章

网友评论

      本文标题:Android基础之简单MVP架构

      本文链接:https://www.haomeiwen.com/subject/sagdddtx.html