android MVP模式 编程思想(上)
来源:互联网 发布:淘宝怎看同行退款率 编辑:程序博客网 时间:2024/05/21 17:03
最近开始重写公司项目,决定采用MVP模式重构项目代码,对MVP模式进行一番学习,有一些收获与心得,和大家一起分享。
同一个功能用不同的代码方式去实现,编程的思路我认为非常重要,MVP模式就是一种编程思路。好的编程思路可以让代码层次分明,思路清晰,代码看起来也舒服,最重要的还
是易于维护和解决bug。
一、什么是MVP?
想必大家伙一定对MVC多少有了解一些,如果忘记了最好去复习一下,MVP其实就是MVC编程思想的一种演变。
M :Model 模型层
V :View 视图层
P :Presenter 主导器(控制器,差不多就是这个意思了)
Model主要数据的获取、处理、存储、删除等等,一句话,凡是涉及数据的处理全部放置在M层。
View主要就是负责数据的UI展示和更新,它只是展示,不做业务逻辑操作。
Presenter 主要起连接Model和View的作用。
注意:Model和View之间没有任何数据交互,全靠Presenter来传递,如下图
二、进一步理解MVP
1、其实Presenter不仅仅负责Model层和View层之间的数据传递,还负责具体业务逻辑操作的封装。Presenter才是起真正的主导作用。
2、View层(Activity),只做数据的显示和更新,当然还有View的初始化,事件的监听注册,使得Activty大大瘦身。做到了真正解耦,既显示与业务逻辑的分离。
3、既然是一种模式,那么对任何一个业务逻辑,代码层次应该都是差不多的,解析以一个新闻列表为例,对MVP编程模式进行最简单的说明,简单却十分重要。
一般来说MVP在实现一个模块功能时一般有6个类组成MVP模式(三个接口,三个实现类,其中view的实现类就是activity)。
M层 :
NewsModel接口
NewsModelImp实现类 实现了NewsModel接口中的方法
V层 :
NewsView接口
NewsActivity实现NewsView接口中的方法
P层:
NewsPresenter 接口
NewsPresenterImp实现类 实现了NewsPresenter接口中的方法
以下代码进做参考,主要还是为了理解MVP的编程思路
been实体类 具体看功能模块了
public class News { public String time;//新闻时间 public String content; //新闻内容 public News(String time,String content){ this.time = time; this.content = content; }}
M层接口
public interface NewsModel { List<News> getNews();//获取新闻列表}M层实现类
public class NewsModelImp implements NewsModel { @Override public List<News> getNews() { return getDate();//模拟网络获取 } /** * 模拟网络获取信息列表 * @return */ public List<News> getDate(){ List<News> list = new ArrayList(); list.add(new News("2017-01-30","福州市软件园全区放假通知...")); list.add(new News("2017-02-16","厦门开通高架自行车道...")); return list; }}M层只涉及到数据(获取,解析...)------------------------------------------------------------------------P层接口public interface NewsPresenter { void showNewsList();}P层实现类public class NewsPresenterImp implements NewsPresenter { private NewsView newsView; private NewsModel newsModel; /** * 构造函数传入V 实例 M * @param newsView */ public NewsPresenterImp(NewsView newsView){ this.newsView = newsView; newsModel = new NewsModelImp(); }//决定业务处理的流程 @Override public void showNewsList() { List<News> list = newsModel.getNews();//先 调用M层获取新闻列表数据 newsView.showList(list);//再 调用V层 将新闻列表数据传入 }}P层获取
V层接口 只对UI进行显示或更新
public interface NewsView { void showList(List<News> list);//显示新闻列表 void showEnd(); //没有更多数据提示}
V层实现类
public class NewsActivity extends AppCompatActivity implements NewsView{ private NewsPresenter presenter;//构造器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); presenter = new NewsPresenterImp(this);//实例构造器 initView(); initDate(); } private void initView(){ //适配实例化 listView控件初始化 设置适配器,简单忽略 } private void initDate(){ presenter.showNewsList();//控制器 调用了显示新闻列表的方法,具体的实现在M层,数据显示在就此activity }//数据显示 @Override public void showList(List<News> list) { // 适配器更新数据操作 比较简单就不写了 } @Override public void showEnd() { Toast.makeText(this,"没有更多数据了!!",Toast.LENGTH_SHORT).show(); }}三、总结M层:获取网络数据、操作数据、解析数据。P层:有一个构造方法传入View的实例(主要还是要在activity中去执行某些事件而由P去控制业务逻辑的调用)P控制逻辑的调用。体现在:1、P层调用M层的方法对数据进行操作,2、P将获取M层的数据,并调用V层的方法更新界面。V层:只做数据的展示,不直接获取数据,不处理数据,不做逻辑判断。IT森,欢迎吐糟!!!
- android MVP模式 编程思想(上)
- Android mvp模式详解 (上)
- 在Android上用MVP模式编程的实践
- Android上的MVP模式
- Android上的MVP模式
- Android--MVP设计思想
- Android 之MVP思想
- Android MVC、MVP、MVVM模式思想的应用
- Android MVP 详解(上)
- Android MVP 详解(上)
- Android MVP 详解(上)
- Android MVP 详解(上)
- Android MVP 详解(上)
- Android MVP 详解(上)
- Android MVP 详解(上)
- Android MVP 详解(上)
- android中MVP或者说mvp模式的使用及思想分解,mvp和mvc的区别
- Android MVP模式 解析JSON 显示到ListView上
- 通过汇编看vs2015下c++各标准库的实现原理
- Java中常用的数据类型转换方法
- 微信小程序 页面的的滚动问题
- 压缩命令(1)
- hdu 5925 counts (二维离散化+dfs)
- android MVP模式 编程思想(上)
- CCF之有趣的数(java)
- LeetCode 62. Unique Paths
- 長野の方言「ほうげん」
- Mybatis 入门之resultMap与resultType讲解实例
- Struts2拦截器
- 文件的编码格式
- MySQ的数据查询语言(DQL)
- 冒泡排序详解