mvp(2)一个简单示例,加深理解

参考:

   http://www.cnblogs.com/liuling/p/mvp-pattern-android.html

架构图:

1、View层

1 public interface NewsView {
2     void showProgress();
3     void addNews(List<NewsBean> newsList);
4     void hideProgress();
5     void showLoadFailMsg();
6 }

这些接口是显示view。具体的view在NewsListFragment中。

1 public class NewsListFragment extends Fragment implements NewsView,xxx

 

--为什么要有个NewView接口?它在哪里使用?

--在Presenter层要访问View层。一般presenter要有一个view的指针或句柄等。

--那么presenter直接有NewsListFragment就可以了,为什么还要个NewsView接口?

--因为 依赖倒置原则 。

2、Model层

1 public interface NewsModel {
2     void loadNews(String url, int type, NewsModelImpl.OnLoadNewsListListener listener);
3     ......
4 }

具体实现

public class NewsModelImpl implements NewsModel {...

这里它很简单,只负责数据管理就可以了。

3、Presenter层

1 public interface NewsPresenter {
2     void loadNews(int type, int page);
3 }

实现代码

1 public class NewsPresenterImpl implements NewsPresenter, NewsModelImpl.OnLoadNewsListListener {
2     private static final String TAG = "NewsPresenterImpl";
3     private NewsView mNewsView;
4 ...

 

--presenter与view层关联。view直接使用presenter指针不就好了?

--同样是依赖倒置原则

4,总结

  在上述示例中,抽象层 NewsModel,NewsView,NewsPresenter 分别扮演mvp,它们完整的表达了业务逻辑。是本软件的核心。

  还有一点,不要过度设计。

 

posted @   f9q  阅读(210)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示