今天分享一个封装的MVP和网络框架OkhttpUtils实现的简单demo
我这里主要参考下面大神的思路进行的封装,这里讲述了一个高级MVP架构的演变过程,链接地址如下
我的demo是根据上面链接的思路加上okhttpUtils组合实现,能使用于绝大部分现实中项目的MVP架构(看demo之前请先看一下上面的演变过程)。
这里我将链接中的MVP架构分为普通和高级,demo中只实现的普通(大概是演变的前五步)的思路另外加上了一个抽象工厂创建presenter方法。
高级则利用了注解,工厂,代理和策略等模式封装,来进一步优化和解决问题,有兴趣可以学习一下高级MVP架构的封装过程并实用与项目中。
下面是demo链接地址,可以下载研究一下代码结构
MVP简介
一、mvp架构简介
View: 对应于Activity,负责View的绘制以及与用户交互
Model: 依然是业务逻辑和实体模型
Presenter: 负责完成View于Model间的交互
通俗的说法:
Activity 和Fragment 视为View层,负责处理 UI。
Presenter 为业务处理层,既能调用UI逻辑,又能请求数据,该层为纯Java类,不涉及任何Android API。
Model 层中包含着具体的数据请求,数据源。
MVP结构
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。Presenter与View的交互是通过接口来进行的。
MVP优缺点
MVP 模式将Activity 中的业务逻辑全部分离出来,让Activity 只做 UI 逻辑的处理,所有跟Android API无关的业务逻辑由 Presenter 层来完成,然后再通知Model去更新数据,然后显示在View中。将业务处理分离出来后最明显的好处就是管理方便,但是缺点就是增加了代码量。
Mvp对比MVC的好处和差异性
在MVC中:Model和View代表着业务逻辑与展示方式,Model和View往往是互相引用,改变展示方式的时候很有可能也要修改业务逻辑层,即修改Controller。因此为了去除这种弊端,需要做解耦,从而生成mvp,虽然MVP的使用比较麻烦了些,但是它的有点也是很明显的,Model和View充分解耦,修改一个不会牵扯到另外一个。