MVP模式在Android项目中的使用


烦了在Activity中编写太多的代码,该app由我来主导。就选择用MVP模式。

概述

MVP是模型(Model)、视图(View)、主持人(Presenter)的缩写,分别代表项目中3个不同的模块。

模型(Model)

负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等;

视图(View)

负责界面数据的展示,与用户进行交互;

主持人(Presenter)

相当于协调者,是模型与视图之间的桥梁,将模型与视图分离开来。





  如上图所示,View与Model并不直接交互,而是使用Presenter作为View与Model之间的桥梁。

其中Presenter中同时持有Viwe层以及Model层的Interface的引用,而View层持有Presenter层Interface的引用。

当View层某个界面需要展示某些数据的时候,首先会调用Presenter层的某个接口,然后Presenter层会调用Model层

请求数据,当Model层数据加载成功之后会调用Presenter层的回调方法通知Presenter层数据加载完毕,

最后Presenter层再调用View层的接口将加载后的数据展示给用户。这就是MVP模式的整个核心过程。


结合demo的示意图


图片放大看



这样分层的好处就是大大减少了Model与View层之间的耦合度。一方面可以使得View层和Model层单独开发与测试,互不依赖。另一方面Model层可以封装复用,可以极大的减少代码量。


技巧


先确定Presenter类的方法,再推出view和model的方法。



步骤:

1、从页面功能按钮分析得出:
a)登录功能。b)清除功能。
2、Presenter类就有了
 login() 和 clear() 方法。
3、login()需要用户名和密码。则IView接口有了
a)getUserName()
b)getpawd()
c)showprocess() 显示进度条
d)显示登录结果,等等的方法

依次类推,把IView和IMode的方法推出来。





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运行时错误7内存溢出_C++程序运行时的内存模型

C程序在运行时会将内存划分为4个区域:1代码区:存放函数体的二进制代码,由操作系统进行管理2全局区:存放程序的全局变量、静态变量、常量3栈区:由编译器进行自动分配和释放,存放函数的参数值,局部…

php strip_tags 少,详解PHP函数 strip_tags的用法不足之处

这篇文章主要介绍了详解PHP函数 strip_tags 处理字符串缺陷bug的相关资料,需要的朋友可以参考下详解PHP函数 strip_tags 处理字符串缺陷bugPHP 函数 strip_tags() 是一个常用函数,该函数可以剥去字符串中的 HTML、XML 以及 PHP 的标签。极大方便了对字符串的操作&am…

玩转Android之MVVM开发模式实战,炫酷的DataBinding!

原文:http://blog.csdn.net/u012702547/article/details/52077515 --------------------------------------------------------- MVP可以结合android的DataBinding -------------------------以下转载--------------- C# 很早就有了MVVM的开发模式,An…

打造一款便携版的Sublime Text

https://segmentfault.com/a/1190000000707661 https://www.cnblogs.com/52cik/p/sublime-diy.html 直接安装Sublime Text,不要打开 大家可以参照上文提到的《Sublime Text 全程指引》中的步骤去进行安装。我这里使用的是Sublime Text 2,其实3也是一样的…

confluence创建页面加载缓慢_树莓派4B使用docker安装confluence

说明confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki。通过它可以实现团队成员之间的协作和知识共享。现在大多数公司都会部署一套confluence,用作内部wiki。另外confluence也可以作为个人的知识管理工具来用,只需要花10…

python用map提取一个数的个十百位数_如何使用python中的map函数?

我们在使用python过程中,为了避免错误删除,会选择做好一个序列后可以插入另外的序列中做为新序列的一部分内容。方便完成一些复杂的工程或多个片段分别编辑后再串成一个完整工程的操作。之前小编向大家介绍了在序列中起到累计作用的reduce函数(https://w…

matlab粒子加速器仿真,粒子群算法优化PID参数 仿真不出结果 程序如下

用的是《MATLAB智能算法30个案例分析》中的程序1.文件名为PSO_PID.mfunction z PSO_PID(x)assignin(base,Kp,x(1)); % 粒子群依次赋值给Kp 这部分运行结果> PSO_PIDassignin(base,Ki,x(2)); …

CentOS5、6的启动流程

CentOS5/6的启动流程启动流程画了张图,看着更清晰些: (centos7的启动流程变化挺大的,这部分待补充)补充(/etc/rc.d/rc.local 不属于任何服务,为特殊文件,可将不能定义为服务又想开机运行的命令定义在此文件中)添加自定义服务:[rootel5 init.d]# vi /etc/init.d/testsrv #!/bin…

Spark交互式分析平台Apache Zeppelin的安装

Zeppelin介绍 Apache Zeppelin提供了web版的类似ipython的notebook,用于做数据分析和可视化。背后可以接入不同的数据处理引擎,包括Spark, Hive, tajo等,原生支持Scala, Java, shell, markdown等。它的整体展现和使用形式和Databricks Cloud是…

win7 php zend,win7系统打开WZend Studio PHP出错的解决方法

很多朋友安装win7系统后,在使用的过程中会遇到win7系统打开WZend Studio PHP出错的情况,可能有很多用户还是不能自己处理win7系统打开WZend Studio PHP出错的问题,其实简单的来说处理win7系统打开WZend Studio PHP出错的问题只需要按照 1、在…

9个元素换6次达到排序序列_C语言必学的12个排序算法:希尔排序(第3篇)

基本思想希尔排序(Shells Sort),以发明人命名,又称为缩小增量排序,也是一种插入排序算法。主要思想:直接插入排序算法时间和待排数据有关,其平均复杂度是O(n^2),但是在待排数据已经有…

java快捷键禁用_pycharm 掌握这些快捷键,你就是大神!!

最重要的快捷键1. ctrlshiftA:万能命令行 2. shift两次:查看资源文件新建工程第一步操作1. module设置把空包分层去掉,compact empty middle package 2. 设置当前的工程是utf-8,设置的Editor-->File Encodings-->全部改成utf-8,注释1. ctrl/:单行注释光标操作1. ctrlalte…

如何在 5 分钟内读懂区块链的架构思维?

作为入门者,如何在最短的时间了解区块链技术,区块链思维,以及比特币的金融原理呢?本文尝试从比特币的架构设计思维出发,让人从宏观上搞清楚区块链的技术本质。 本文授权转载自阿里技术 作者 | 郑吉 区块链不是一种技术…

魅族Flyme5.x以上系统INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

用android studio 连接魅族flyme5.0安装app,报 Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 解决方法: 1、进入手机管家 2、权限管理 3、usb安装管理 4、关闭 完美解决问题

php取key的value值,获取数组中key和value的值

方法1:PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用…

arduino 上传项目出错_Arduino多核编程:简单例子

不管你是Arduino领域的新手还是经验丰富的开发人员,很可能你还只使用过单核在进行编程。 这没有什么好笑的---- 事实上,直到几天前我才使用Arduino IDE进行了第一次多核编程。 我和所有其他Arduino粉丝都非常喜欢IDE的易用性以及MicroController 开发所需…

Hadoop-RPC应用demo

Hadoop里的rpc框架可以单独拿出来使用。jar包全在hadoop-common工程里。 导入hadoop-common工程里(hadoop-2.7.3为例): hadoop-common-2.7.3.jar \hadoop-2.7.3\share\hadoop\common\lib下的全部jar包 实例 rpc.client 客户端 rpc.pr…

php 变量 可用拼音表示,php汉字转拼音的示例

. 代码如下:class Helper_Spell{public $spellArray array();static public function getArray() {return unserialize(file_get_contents(pytable_without_tune.txt));}/*** desc 获取字符串的首字母* param $string 要转换的字符串* param $isOne 是否取首字母* param $uppe…

Opencv-Python:图像尺寸、图像的读取、显示、保存与复制

Opencv-Python:图像尺寸、图像的读取、显示、保存与复制 原创 2017年11月23日 21:30:494440在使用opencv的方法时,首先必须导入opencv包。新的opencv导入cv2,这里也和cv做了一个对比 [python] view plaincopy import cv2 一、图像尺寸 图像的…

宝塔面板服务器ip地址修改_「网站」快速搭建服务器环境及网站

目录:「NAS」我的搭建NAS全过程在文章开头我想说明的是,此文章中所使用的工具为 BT 面板即宝塔面板,适合小白使用但是对于想要提升个人能力来说, BT 面板并不是一个好选择,而作为新手来说,可以使用该面板进…