认识Android中的MVP设计模式_第1张图片 认识Android中的MVP设计模式

前言

Android中的MVP设计模式如今已然不是什么新鲜的东西了,目前我们在做的项目中也已经广泛在使用。当我们的项目越来越庞大,越来越复杂,参与的研发人员越来越多的时候,你会发现MVP设计模式的优势越来越明显。

MVC vs MVP

开始前还是简单的聊聊MVP模式,MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Activity应该是属于View这一层。而实质上,它既承担了View,同时也包含一些Controller的东西在里面。这对于开发与维护来说不太友好,耦合度大高了。把Activity的View和Controller抽离出来就变成了View和Presenter,这就是MVP模式。

MVP模式(Model-View-Presenter)可以说是MVC模式(Model-View-Controller)在Android开发上的一种变种、进化模式。后者大家可能比较熟悉,就算不熟悉也可能或多或少地在自己的项目中用到过。要介绍MVP模式,就不得不先说说MVC模式。

MVC

MVC模式下,系统框架的类库被划分为3种:模型(Model)、视图(View)、控制器(Controller)。模型对象负责建立数据结构和相应的行为操作处理。视图对象负责在屏幕上渲染出相应的图形信息展示给用户看。控制器对象负责截获用户的按键和屏幕触摸等事件,协调Model对象和View对象。

用户与视图交互,视图接收并反馈用户的动作;视图把用户的请求传给相应的控制器,由控制器决定调用哪个模型,然后由模型调用相应的业务逻辑对用户请求进行加工处理,如果需要返回数据,模型会把相应的数据返回给控制器,由控制器调用相应的视图,最终由视图格式化和渲染返回的数据,对于返回的数据完全可以增加用户体验效果展现给用户。

一个模型可以有多个视图,一个视图可以有多个控制器,一个控制器也可以有多个模型。

MVP

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

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

视图(View):负责界面数据的展示,与用户进行交互;

主持人(Presenter):相当于协调者,是模型与视图之间的桥梁,将模型与视图分离开来。

认识Android中的MVP设计模式_第2张图片 MVC vs MVP

MVP模式的优势

1.分离了视图逻辑和业务逻辑,降低了耦合

2.Activity只处理生命周期的任务,代码变得更加简洁

3.视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可阅读性

4.Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试

5.把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM

MVP的一个简单案例

想写这个案例费了一些脑筋,从网上看了一圈,写的最多的就是登录功能。那我也就照着写了一遍,在这跟大家简单的理一遍思路,重在学习。

界面展示

要实现的功能可能很简单,如下图,主要就是登录和重置功能。

认识Android中的MVP设计模式_第3张图片 主界面

项目的MVP架构展示

认识Android中的MVP设计模式_第4张图片 项目架构展示

bean目录

这个应该很好理解,就是User对象的实体Bean。这个我就不细讲了,大家应该都知道。

model目录

IUserModel :定义了处理Login业务逻辑的接口。三个参数:用户名、密码、回调的一个接口。

IUserModel OnLoginListener

IUserImp:Model层的具体实现类

认识Android中的MVP设计模式_第5张图片 IUserImp

View层:IUserView接口中,我们抽象出来了很多方法。

认识Android中的MVP设计模式_第6张图片 IUserView

接下来我们来想想Presenter层怎么设计,思考在当前的主界面会有几个触发的事件,会发现有两个login和reset。所以在Presenter中处理的方法就有两个。

认识Android中的MVP设计模式_第7张图片 UserLoginPresenter

最后要介绍的就是实现我们View层抽象接口的重量级人物了:Activity

认识Android中的MVP设计模式_第8张图片 MainActivity

至此本文只是对MVP设计模式做了一个简单的介绍,具体神奇在何处,需要各位自己去挖掘了。

案例项目的源码在我的Github上:MVPSchema


大眼杰克  jxiaolee@aliyun.com

To 每一个认真阅读我博客的朋友们:只要心中有希望存在,就有幸福存在。

更多相关文章

  1. Android 框架模式 MVC 在Android中的使用
  2. Android默认USB为host模式
  3. android adb 读写模式 挂载文件系统
  4. 2.4.8 滚动视图
  5. Android M 去除抽屉模式
  6. Android 中设计模式 ----原型模式
  7. android观察者模式
  8. [Android]当Activity启动模式为singleTask时的生命周期

随机推荐

  1. Go 为什么这么“快”
  2. Go语言中操作MySQL数据库的方法
  3. Go命令行参数及标准输入输出介绍
  4. 解决使用go get命令被墙的问题
  5. golang怎么搭一个网站
  6. go mod模块化介绍
  7. go引入外部依赖的三种方式介绍
  8. golang怎么debug
  9. 安装go第三方库的方法
  10. go语言之goroute协程