前言
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):相当于协调者,是模型与视图之间的桥梁,将模型与视图分离开来。
MVP模式的优势
1.分离了视图逻辑和业务逻辑,降低了耦合
2.Activity只处理生命周期的任务,代码变得更加简洁
3.视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可阅读性
4.Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试
5.把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM
MVP的一个简单案例
想写这个案例费了一些脑筋,从网上看了一圈,写的最多的就是登录功能。那我也就照着写了一遍,在这跟大家简单的理一遍思路,重在学习。
界面展示
要实现的功能可能很简单,如下图,主要就是登录和重置功能。
项目的MVP架构展示
bean目录
这个应该很好理解,就是User对象的实体Bean。这个我就不细讲了,大家应该都知道。
model目录
IUserModel :定义了处理Login业务逻辑的接口。三个参数:用户名、密码、回调的一个接口。
IUserImp:Model层的具体实现类
View层:IUserView接口中,我们抽象出来了很多方法。
接下来我们来想想Presenter层怎么设计,思考在当前的主界面会有几个触发的事件,会发现有两个login和reset。所以在Presenter中处理的方法就有两个。
最后要介绍的就是实现我们View层抽象接口的重量级人物了:Activity
至此本文只是对MVP设计模式做了一个简单的介绍,具体神奇在何处,需要各位自己去挖掘了。
案例项目的源码在我的Github上:MVPSchema
大眼杰克 [email protected]
To 每一个认真阅读我博客的朋友们:只要心中有希望存在,就有幸福存在。