定义MVP框架

结构如下图所示

Model层回调接口如下 

Presenter层调用model层的方法请求数据,如果是异步则通过该回调将数据返回到P层

public interface BaseCallInterface<T> {

    /**
     * 回调数据
     * @param t
     */
    void callBackData(T t);

}

Model文件如下   

Model层获取数据的方法

public interface Model {

    void setCallBack(BaseCallInterface callBack);
}

View文件

连接Activity和Presenter的接口

public interface View {
    /**
     * 基础的返回,可以删除,只是抽取共性
     * @param info
     */
    void showMessage(String info);
}

presenter文件

P层,连接V层和Model层, V层调用P层的方法-->>然后P层通过执行Model层的方法,Model层在执行完方法后执行接口方法,
由于P层实现了Model层的回调,然后通过P层执行V层的方法完成M和V层之间的数据传递
public interface Presenter<M extends Model, V extends View> {
    /**
     * 注册Model层
     *
     * @param model
     */
    void registerModel(M model);

    /**
     * 注册View层
     *
     * @param view
     */
    void registerView(V view);

    /**
     * 获取View
     *
     * @return
     */
    V getView();

    /**
     * 销毁动作(如Activity、Fragment的卸载)
     */
    void destroy();
}

BaseMvp文件

抽取Activity和Fragment的初始化方法以及创建MVP的方法

public interface BaseMvp<M extends Model, V extends View, P extends BasePresenter> {

    M createModel();

    V createView();

    P createPresenter();

    ViewGroup getViewGroupRoot();

    int getContentViewId();

    void initSubView(android.view.View view);

    void initData();

}

BasePresenter文件

实现Presenter接口的抽象类

public abstract class BasePresenter<M extends Model, V extends View> implements Presenter<M, V> {
    /**
     * 使用弱引用来防止内存泄漏
     */
    private WeakReference<V> wrf;
    protected M model;

    protected boolean isViewAttrs(){
        if (wrf!=null){
            return true;
        }else {
            return false;
        }
    }

    @Override
    public void registerModel(M model) {
        this.model = model;
    }

    @Override
    public void registerView(V view) {
        wrf = new WeakReference<V>(view);
    }

    @Override
    public V getView() {
        return wrf == null ? null : wrf.get();
    }

    /**
     * 在Activity或Fragment卸载时调用View结束的方法
     */
    @Override
    public void destroy() {
        if (wrf != null) {
            wrf.clear();
            wrf = null;
        }
        onViewDestroy();
    }

    protected abstract void onViewDestroy();
}

BaseMvpActivity文件如下

public abstract class BaseMvpActivity<M extends Model, V extends View, P extends BasePresenter> extends AppCompatActivity implements BaseMvp<M, V, P> {
    protected P presenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        android.view.View containerView = getLayoutInflater().inflate(getContentViewId(),
                getViewGroupRoot());
        setContentView(containerView);
        //创建Presenter
        presenter = createPresenter();
        if (presenter != null) {
            //将Model层注册到Presenter中
            presenter.registerModel(createModel());
            //将View层注册到Presenter中
            presenter.registerView(createView());
        }
        initSubView(containerView);
        initData();
    }

    @Override
    public abstract int getContentViewId();

    @Override
    public ViewGroup getViewGroupRoot() {
        return null;
    }
    @Override
    public void initSubView(android.view.View view) {
    }

    @Override
    public void initData() {
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (presenter != null) {
            //Activity销毁时的调用,让具体实现BasePresenter中onViewDestroy()方法做出决定
            presenter.destroy();
        }
    }
}

BaseMvpFragment如下

public abstract class BaseMvpFragment<M extends Model, V extends View, P extends BasePresenter> extends Fragment implements BaseMvp<M, V, P> {
    protected P presenter;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        presenter = createPresenter();
        if (presenter != null) {
            presenter.registerModel(createModel());
            presenter.registerView(createView());
        }
    }

    @Override
    public android.view.View onCreateView(LayoutInflater inflater, ViewGroup container,
                                          Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        android.view.View containerView = inflater.inflate(getContentViewId(), container,
                false);
        initSubView(containerView);
        initData();
        return containerView;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        if (presenter != null) {
            presenter.destroy();
        }
    }
}

以上就是base包中的全部文件

猜你喜欢

转载自blog.csdn.net/fengzhiqi1993/article/details/81224764