Android 的 MVP 模式浅尝

Presenter

负责所有业务数据操作的实现。
创建的时候把相应的 View 也传递过来,在 View 中实现 setPresenter(Presenter presenter) 类似接口,在 presenter 中将自身设置给 View。

View

负责展示给用户的显示UI。
通过实现 setPresenter(Presenter presenter) 接口得到对 Presenter的引用,在界面 UI 发生点击等事件后,调用相应的 presenter 的方法实现数据获取,presenter 在获取到数据后,会调用自身引用的 View 的相应的展示数据的方法进行UI响应。

Contract类

由于 View 和 Presenter 都互相持有对方的引用,并且每一个 View 也就是我们应用的每一个界面,他们的数据操作都有所不同,所以为了方便管理,同一个界面的 View 和 Presenter 应该有一个方法的约束类。
也就是说:每一个 View 能够执行的操作是固定了的,那么相对应的 Presenter 的方法也是相对固定的。例如:一个管理 task 的界面,他的 contract 类可以做成如下:

public interface TasksContract {

//task这个 View 能够执行的 UI 层面的操作方法
interface View extends BaseView<Presenter> {

void setLoadingIndicator(boolean active);

void showTasks(List<Task> tasks);

void showAddTask();

void showTaskDetailsUi(String taskId);

void showTaskMarkedComplete();

void showTaskMarkedActive();

void showCompletedTasksCleared();

void showLoadingTasksError();

void showNoTasks();

void showActiveFilterLabel();

void showCompletedFilterLabel();

void showAllFilterLabel();

void showNoActiveTasks();

void showNoCompletedTasks();

void showSuccessfullySavedMessage();

boolean isActive();

void showFilteringPopUpMenu();
}

//task 这个 View UI 的方法需要调用的数据解析类的方法
interface Presenter extends BasePresenter {

void result(int requestCode, int resultCode);

void loadTasks(boolean forceUpdate);

void addNewTask();

void openTaskDetails(@NonNull Task requestedTask);

void completeTask(@NonNull Task completedTask);

void activateTask(@NonNull Task activeTask);

void clearCompletedTasks();

void setFiltering(TasksFilterType requestType);

TasksFilterType getFiltering();
}
}

其中接口 BaseView 定义了所有的 View 类都必须实现的基础方法:

public interface BaseView<T> {

void setPresenter(T presenter);

}

同样接口 BasePresenter 定义了所有的 Presenter 都必须实现的基础方法:

public interface BasePresenter {

void start();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值