设计模式之mvp设计模式

参考链接

《android-architecture》-googlesample

mvp设计模式

说明

  和传统的mvc不同的的是,原先controller的概念变为presenter,原意为“代理”的意思,mvp设计模式中,model和view的交互完全由Presenter进行代理,简单理解就是,View请求Model时,是先发送给Presenter,Presenter收到请求,再发送请求给Model,Model响应数据回Presenter,Presenter再响应回View,此时完成交互。Model请求View也是差不多的过程。
  mvp设计模式在Android最为常用。

传统MVC和MVP之间的图示比较

这里写图片描述
这里写图片描述

google mvp

这里写图片描述

BasePresenter

public interface BasePresenter {
    //可以用来初始化相关的数据
    void start();

}

BaseView

public interface BaseView<T> {
    //view层可以引用Presenter
    void setPresenter(T presenter);
}

module

contract
这个是根据具体模块,抽象更多功能的类
public interface TasksContract {

    interface View extends BaseView<Presenter> {
//可以再设计更多抽象方法···············
        void showTasks(List<Task> tasks);
    }

    interface Presenter extends BasePresenter {
//可以再设计更多抽象方法···············
        void loadTasks(boolean forceUpdate);
    }
}
View
public class TasksFragment extends Fragment implements TasksContract.View {
    private TasksContract.Presenter mPresenter;
//其他方法略····················
    @Override
    public void showTasks(List<Task> tasks) {
        //Presenter向model获取数据后,将回调此方法,返回有数据的tasks给View层
    }
    @Override
    public void setPresenter(@NonNull TasksContract.Presenter presenter) {
    //Presenter实例化后回调TasksContract.View 中setPresenter()方法,从而View层也获取到Presenter的引用
        mPresenter = checkNotNull(presenter);
    }
}
Presenter
public class TasksPresenter implements TasksContract.Presenter {
//数据层data包中的封装类
    private final TasksRepository mTasksRepository;
//view层
    private final TasksContract.View mTasksView;

    public TasksPresenter(@NonNull TasksRepository tasksRepository, @NonNull TasksContract.View tasksView) {
        mTasksRepository = checkNotNull(tasksRepository, "tasksRepository cannot be null");
        mTasksView = checkNotNull(tasksView, "tasksView cannot be null!");
//使View层得到Presenter的引用
        mTasksView.setPresenter(this);
    }
}

Activity

在Activity中初始化Presenter的实现类,即可完成MVP模式的分层,view层只做视图展示,model层负责查询数据,Presenter负责View和model的代理。

// Create the presenter
mTasksPresenter = new TasksPresenter(
        Injection.provideTasksRepository(getApplicationContext()), tasksFragment);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值