梗概
MVP模式是MVC模式在Android上的一种变体,在MVC模式中,Activity应该是属于View这一层,它既承担了View,同时也包含了一些Controller的东西在里面,这对于开发与维护来说不太友好,耦合度太高。把Activity的View和Controller抽离出来就变成了View和Presenter,这就是MVP模式。

先熟悉一下MVC模式
M层:适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。
V层:应用层中处理数据显示的部分,XML布局可以视为V层,显示Model层的数据结果。
C层:在Android中,Activity处理用户交互问题,因此可以认为Activity是控制器,Activity读取V视图层的数据(eg.读取当前EditText控件的数据),控制用户输入(eg.EditText控件数据的输入),并向Model发送数据请求(eg.发起网络请求等)。

举个例子大家可能比较好理解:实现的是一个天气查询功能,在页面EditText上输入城市名称,点击Button调用天气API,返回的天气数据显示在TextView里面。例子中显示的EditText、Button、TextView都属于View层,例子中实现向API请求数据的是Model层,Controller层就是其中的Activity,监听View中的点击事件,然后向Model层(可能是数据库、网络、算法、任务等)请求数据,回调之后再在View中显示。

为什么用MVP架构
我们平常开发中的Activity、XML界面加起来就已经相当于一个MVC的架构模式,这种开发方式的缺点就是业务量大的时候,一个Acitvity分分钟飙到上千行代码,想要改一处业务逻辑光是去找就要费半天劲,而且有点地方逻辑处理是一样的无奈是不同的 Activity 就没办法很好的写成通用方法。
MVP 模式将Activity 中的业务逻辑全部分离出来,让Activity 只做 UI 逻辑的处理,所有跟Android API无关的业务逻辑由 Presenter 层来完成。将业务处理分离出来后最明显的好处就是管理方便,但是缺点就是增加了代码量。Persenter的中文翻译是“主持人”。

下面,参考以下另一篇文章写得
为什么参考,我觉得他写得不错,我不需要重复写了,参考文章Android MVP架构搭建 ,建议大家也去看看,这里只作解析、总结。

该项目的目录结构为:

MvpView是个接口,里面定义了各种View的操作接口,并由MainActivity实现,这样它们就组合成了View层。
MainActivity里定义了MvpPresenter对象,并将MvpView的实现类作为参数传入MvPresenter的构造方法里面,这样Presenter层就能操控View层。

下面把MvpPresenter类代码贴出来,我们可以看到当View调用MvpPresenter里的getData(View view)方法时调用了MvpModel的getNetData(params,new MvpCallback(){…})方法,从MvpModel层获取数据回来后回调,再调用MvpView对象方法将数据传给View层。

public class MvpPresenter {// View接口private MvpView mView;public MvpPresenter(MvpView view){this.mView = view;}/*** 获取网络数据* @param params 参数*/public void getData(String params){//显示正在加载进度条mView.showLoading();// 调用Model请求数据MvpModel.getNetData(params, new MvpCallback() {@Overridepublic void onSuccess(String data) {//调用view接口显示数据mView.showData(data);}@Overridepublic void onFailure(String msg) {//调用view接口提示失败信息mView.showFailureMessage(msg);}@Overridepublic void onError() {//调用view接口提示请求异常mView.showErrorMessage();}@Overridepublic void onComplete() {// 隐藏正在加载进度条mView.hideLoading();}});}
}

参考的文章里还对这代码进行了个升级,即抽象出Base父类或使用泛型以减少项目的多余的代码,在这只说说MVP这个模式,不再深入,下面看看MVP模式的整体结构图,可以看出直接把Activity、Fragment把繁重的工作中解脱了。

总结
MVP模式相对现在Android开发里比较模糊的MVC模式来说的确是更为解耦了,特别是对于一些大型的项目能够更好地实现分工,但相对于小项目,实现一个功能需要写的代码更多了。还是哲学的那句,实事求是,根据不同项目、不同的开发人员结构来选择不同的模式。

参考文章:
Android MVP模式 简单易懂的介绍方式
框架模式 MVC 在Android中的使用
Android MVP架构搭建

Android,什么是MVP模式?相关推荐

  1. Android当中的MVP模式(七)终篇---关于对MVP模式中代码臃肿

    个人博客:CODE FRAMER BIGZ MVP系列文章配套DEMO Android 当中的 MVP 模式(一)基本概念 Android 当中的 MVP 模式(二)封装 Android 当中的 MV ...

  2. android中的mvp模式怎么定义,详解MVP模式在Android开发中的应用

    一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Mode ...

  3. Android 中的MVP 模式

    MVP模式的核心思想: MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成功接口,Model类还是原来的Model. MVC 其中View层其实就是程序的UI界面,用于向用户展示 ...

  4. android中的mvp模式怎么定义,在android中使用MVP模式

    1.MVP介绍java 随着UI建立技术的功能日益加强,UI层也履行着愈来愈多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专一于处理数 据的可视化以及与用户的交互,同时 ...

  5. Android 浅谈MVP模式 一

    一直想记录下最近学习MVP模式的一些心得,又怕写的太渣,没办法,先写写然后及时更新. 我会粘贴一些代码,对于MVP模式的理解会在代码中详细注释 例一:闪屏界面判断是否已经登录 Presenter:对于 ...

  6. android mvp模式鸿洋,Android上的MVP模式

    什么是MVP? MVP模式可以分离显示层和逻辑层,所以功能接口如何工作与功能的展示可以实现分离,MVP模式理想化地可以实现同一份逻辑代码搭配不同的显示界面.首先要澄清就是MVP不是一个结构化的模式,它 ...

  7. Android中的MVP模式学习

    文章目录 1. MVP模式简介 1.1 MVP所对应的意义 2. MVP模式的应用 2.1 model层描述和具体代码 2.2 view层描述和具体代码 2.3 presenter层描述和具体代码 2 ...

  8. Android中的MVP模式初步使用

    为什么80%的码农都做不了架构师?>>>    之前在做javaweb的项目的时候,最开始接触的mvc结构作为做根本的结构,在Android项目中 Google本身设计的Androi ...

  9. Android中用到的MVP模式

    参考:android架构设计-mvp模式封装 MVP模式是由MVC模式逐渐演化出来的.首先简单介绍一下MVC.这个在Spring框架里面是一个很常见的模式. MVC M(model)模型, 是应用程序 ...

  10. MVP模式在Android实际项目中的应用和优化

    注:本文阅读需要对MVP模式有基本了解. MVP模式已经出现有很长一段时间了,但是火起来是这两年的事情. 关于MVP的概览,介绍,乃至于教程,Demo,实例,网上都有很多,我也有一篇文章专门收录了一些 ...

最新文章

  1. java 反射代价_Java反射机制
  2. 湖南城市学院c语言试卷题目,英语四级、计算机二级--C语言应该怎样复习?考试有哪些题型?...
  3. redis 使用管道提升写入的性能[pipeline]
  4. mysql 中模糊查询的四种用法介绍
  5. .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法
  6. sfs2x 连接 mongodb
  7. 虚拟资源拳王公社:虚拟副业怎么赚钱,最简单的副业是什么,小白没经验怎么做副业
  8. “RuntimeError: main thread is not in main loop“的几种解决方案
  9. 如何攻克 C++ 中复杂的类型转换?
  10. vmware workstation中Linux虚拟机固定IP
  11. 【FPGA】【转载】跨越鸿沟:同步世界的异步信号
  12. win10使用powerShell执行ps1文件方法
  13. 《胡雪岩全传》高阳——读后感
  14. 为什么图像预处理矩阵要除以255?
  15. 参加数学建模国赛,需要掌握哪些数学建模知识
  16. python爬取物流信息_手把手教你用Python爬取快递100查询你的物流信息
  17. MySQL精简版安装教程
  18. 两套工厂通用ERP系统【源代码免费分享】
  19. 蓝桥杯单片机学习3——数码管静态显示
  20. 10余年软件开发与系统架构经验,一起聊聊软件开发技术、系统架构技术、以及程序员最真实可行的职场打怪技能,代码之外的生存软技能。

热门文章

  1. 定时删除虚拟服务器快照,ESXi6.0 设置自动删除快照脚本及计划任务
  2. mac快捷键:轻松提升mac使用效率
  3. 经验之谈:做好淘宝客的一些经验秘籍
  4. con排插与单片机相连_单片机与8255芯片连接详解
  5. 8255A并行 I/O 接口芯片
  6. 【SequoiaDB 学习笔记】巨杉分布式数据库初接触
  7. GGT: Graph-Guided Testing for Adversarial Sample Detection of Deep Neural Network 论文笔记
  8. node中Async模块的用法
  9. Android 2020年最新保活方案 保活90% 已适配8.0 ,9.0, 10.0(酷狗音乐)
  10. c语言编程数字后有ul,十六进制数后跟L/U/UL解析