Android基础之简单MVP架构

2023-04-03  本文已影响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() {

    }
}

完了

上一篇 下一篇

猜你喜欢

热点阅读