mvp

MVP设计模式简介:

其实说起MVP设计模式,应该要先去了解一下mvc设计模式,android本身就是一种MVC的设计模式:网络,数据库,本地文件的数据存取作为Model,Acitivity作为Controller,而xml文件还有一些界面相关的组件作为View。但是这样的设计在我们真正去做项目的时候可能完美的体现出来么?这是不可能的,往往我们要在Activity里面写很多界面的东西,比如Dialog,PopWindow等等,也就是说,View层和Controller层紧紧联系在一起,造成代码的高度耦合。而且在MVC里,是允许View层直接访问Model层的。而mvp的出现就是用Presenter代替以前的Controller,实现V,C层的完美分离,当然这个实现需要接口的辅助。看完下面的例子就明白了。

1、model层处理

      定义两个类 MvpModel,BaseModel对网络数据请求进行封装

public abstract class MvpModel {

    private Context mContext;
    public MvpModel(Context mContext) {
        this.mContext = mContext;
    }
    public String getServerUrl() {
        return Contans.HTTP_URL;
    }
}

public class BaseModel extends MvpModel {

    public BaseModel(Context mContext) {
        super(mContext);
    }

    public Retrofit initRetrofit() {
        return new Retrofit.Builder()
                .baseUrl(getServerUrl())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(ScalarsConverterFactory.create()).build();
    }
}

   2、view定义接口

public interface MvpView {

    void sucess(String result);
    //显示登录失败,并说明服务器登录错误的原因
    void showLoginFail(Throwable t);
}
 

MvpView这个具体根据你的项目而定,看看界面需要定义的共同方法是什么,可以加到父接口中,一般用空接口就行了

3、定义MvpPresenter 简称p层,p的作用就是与view,model两者之间建立联系,作为一个桥梁 的关系

下面定义了几个类MvpBasePresenter,BasePresenter,和两个接口 OnFinishedListener,MvpPresenter

MvpPresenter 的作用是对view进行绑定,

public interface MvpPresenter<V extends MvpView> {
 
  void attchView(V view);
    void disattchView(boolean retainInstance);
}

MvpBasePresenter是实现MvpPresenter 接口的一个类,对view操作的方法进行实现。

public abstract class MvpBasePresenter<V extends MvpView> implements MvpPresenter<V> {
    private WeakReference<V> viewRef;
    @Override
    public void attchView(V view) {
        viewRef = new WeakReference<>(view);
    }
    @Override
    public void disattchView(boolean retainInstance) {
        if (viewRef != null) {
            viewRef.clear();
            viewRef = null;
        }
    }
    public boolean isViewAttached() {
        return viewRef != null && viewRef.get() != null;
    }
    public V getView() {
        return viewRef == null ? null : viewRef.get();
    }
}

BasePresenter抽象类,与model建立关系,并集成MvpBasePresenter从而也与view建立联系

public abstract class BasePresenter<M extends BaseModel> extends MvpBasePresenter {
   
private M model;
    private Context mContext;
    public BasePresenter(Context mContext) {
        this.mContext = mContext;
        model = bindModel();
    }
    public Context getContext() {
        return mContext;
    }
    public M getModel() {
        return model;
    }
    public abstract M bindModel();
}

OnFinishedListener是将p层获取数据的成功或者失败返回给view层(回调)

public interface OnFinishedListener {
    //加载成功
    void onSuccess(String result);
    //加载失败
    void Fialed(Throwable t);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值