简单的MVP写法(一)

目前接触过的项目,大部分都是MVP模式,现在使用MVP模式比较习惯。
关于MVP的概念:
M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。 个人认为,MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,其负责调控 View与Model之间的间接交互。本质就是降低了程序的耦合性。MVP三个层各自负责相应的任务就好了,Model层负责获取数据,通过Presenter层将数据传递给View层(一般是实现了特定View接口的Activity和Fragment)。

对于MVP模式的具体实现,有这很多的理解,下面简单的介绍一种,这种写法和谷歌官方给出的demo类似,个人感觉是简化了Model层,首先是写一个Contract接口:

public interface SearchBookContract {

    interface SearchBookView extends BaseView{
        void showNearbyListResult(List<NearbyPerson> list);
    }

    interface SearchBookPresenter extends BasePresenter{
        void getSearchBooks(String name,String longitude,String latitude,String sex);
    }

}

这个接口里面有两个接口,分别代表View和Presenter,BaseView和BasePresenter可以由各自项目的需求具体再写。

接下来是Presenter的具体实现:

public class SearchBookPresenterImpl implements SearchBookContract.SearchBookPresenter {

    private SearchBookContract.SearchBookView mSearchBookView;
    private Context mContext;

    public SearchBookPresenterImpl(SearchBookContract.SearchBookView mSearchBookView) {
        this.mSearchBookView = mSearchBookView;
    }

    @Override
    public void getSearchBooks(String name,String longitude,String latitude,String sex) {
        AppNetLoader.getInstance().async(AppNetLoader.getInstance().getService().getNearbyPersonList(name, longitude, latitude, sex),
                new BaseObserver<List<NearbyPerson>>() {
                    @Override
                    protected void setNeedContext() {
                        setContext(mContext);
                    }

                    @Override
                    protected void _onNext(List<NearbyPerson> list) {
                        mSearchBookView.showNearbyListResult(list);
                    }

                    @Override
                    protected void _onError(Throwable e) {
                        mSearchBookView.onError(e.toString());
                    }
                });


    }

    @Override
    public void getContext(Context context) {
        mContext = context;
    }
}

实现SearchBookPresenter 的方法,在getSearchBooks方法中发起网络请求,获取数据,再通过Rxjava的转换,在回调方法中,mSearchBookView获得了数据。

在需要数据的Activity或者Fragment中,实现SearchBookContract.SearchBookView,实现其方法之后,就可以拿到数据啦。
需要注意的是,需要在Activity或者Fragment中先初始化对应的Presenter,

 private SearchBookPresenterImpl mPresenter;

然后在onceate方法中

mPresenter = new SearchBookPresenterImpl(this);

接着在需要发起网络请求的地方发起请求就好了:

mPresenter.getSearchBooks("","","",'");

最后在其回调中回去请求成功或者失败的数据:
这是请求成功的方法

 @Override
    public void showNearbyListResult(List<NearbyPerson> list) {
        mShow.setText(list.toString());
    }

这是请求失败的方法

@Override
    public void onError(String e) {
        mShow.setText(e);
    }

最后,具体的代码(包括Retrofit+Rxjava的封装,网络请求封装)都在我的github中:
https://github.com/ckwcc/MVP-Retrofit-RxJava

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值