参考博客
http://www.cnblogs.com/end/archive/2011/06/02/2068512.html

####MVC模式
M:model 模型
V:view 视图
C:controller 控制器
> 我们知道,所有的软件的构成主要有两部分,分别是用户交互入口(USER INTERFACE)和数据(DATA)。那么为什么UI(USER INTERFACE)称为用户交互入口呢?因为我们的用户,在使用我们的软件的时候,他们关心的并不是使用了什么技术实现的,考虑更多的是这个功能好不好用,这个交互舒服不舒服。那么用户在通过视觉和通过操作使用我们软件的时候,接触用户的就是我们的界面,承载交互的就是我们界面上的控件。所以,UI称之为用户交互入口,因为有了视觉体验有了感知,才会有行为,有了行为才能称之为交互。用户的行为,也就是交互,我们就是C(CONTROLLER)在处理,那么呈现在UI(USER INTERFACE)上面的内容,就是我们的数据,所以我们的M(MODEL)就是MVC中的数据模型。
在我们的android开发过程中,本质上并没有完全遵循MVC架构模式。以Activity为例:
它可以是V也可以使C。因为Activity能兼容了View和Controller的基本特征。那么,在Android中,MVC在哪些场景下体现的比较准确呢?以列表级控件的使用为例(ListView,GridView):我们需要声明ListView这个外层容器,然后定义Item的UI样式,然后通过适配器将UI和数据进行匹配,最后将适配器和控件进行绑定。那么这个就是我们MVC软件架构模型的一个很清晰的体现,在列表级控件中,我们使用了Adapter,在设计模式中,称之为适配器模式。所以在这个小例子中,就要体会一下软件架构模型和设计模式的区别。

![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502204735961-1299977060.png)

####MVP模式
M:model 模型
V:view 视图
P:presenter 中间人
> MVP作为MVC的演化进阶模型。它的灵活性以及优势主要体现在复杂的业务场景下。首先MVP中的M(MODEL)可以承载交互扮演MVC中C(CONTROLLER)的角色,也可以扮演MVC中M(MODEL)的角色,可以进行数据建模也可以进行视图建模。MVP中V(VIEW)属于单纯意义上的视图层。P(PRESENTER)则作为中间人亦或者桥梁,将M和V进行关联。同时MVP中的P(PRESENTER)也可以作为业务实现层体现在项目中。

![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502205017898-423547242.png)

> 所以,综上,MVP相比较MVC我们发现,它的灵活性更高了,并且,拆解效率非常明显。总结一句话就是,MVP在复杂业务背景下,解耦和扩展效果突出。
MVP 的缺点:model 层与 Presenter 层,presenter层与 view 层之间通过接口建立联系,这样会导致当页面逻辑很复杂的时候,View 层实现的接口会很多,如果你的App中有很多复杂的页面,维护接口的成本会变的很大。

#### MVVM 模式
MVVM 模式将 Presenter 改名为 ViewModel,基本与MVP模式一致
区别在于 View 层与 ViewModel 层通过 DataBinding相互绑定。View层的变动,自动反应在 ViewModel 层,反之亦然

### Dagger2在MVP中所发挥的作用
Dagger2是为Android和Java平台提供的编译时进行依赖注入的框架,编译时生成代码,完成所需对象的注入,解决了基于反射带来的开发和性能上的问题。主要是用于界面和业务之间的隔离

使用步骤:

>0.添加依赖
>0.借助工具生成编译注解器(在gradle中进行配置),在编译时起作用
>1.指定要注入的目标(@inject)
>2.创建dagger文件,创建module类(@module,@presenter)
>3.通过接口建立Activity和Module之间的关系(@component)
>4.rebuild 编译生成代码
>5.使用那个类

![](http://images2015.cnblogs.com/blog/1061881/201704/1061881-20170425231236537-2061171856.png)
![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502205419961-1042417469.png)

>“可参考的博客:http://blog.csdn.net/tiankong1206/article/details/46486401”

### Retrofit
利用注解和okHttp实现和服务器的数据交互
用法
0.添加依赖并进行配置
1.创建model数据模型
2.定义REST API接口
3.创建Retrofit对象并发起请求

### RxJava
本质是一个在java VM 上使用可观测序列的基于事件程序的异步操作库,使用简洁的逻辑处理复杂的任务的一个异步操作库。
可以轻松处理不同环境下的后台线程和UI线程库
关键字:简洁,异步,队列化
![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502221056179-1270622283.png)

MVC和MVP设计模式的更多相关文章

  1. MVC,MVP设计模式

    什么是MVP MVP是模型(Model).视图(View).主持人(Presenter)的缩写,分别代表项目中3个不同的模块. 模型(Model):负责处理数据的加载或者存储,比如从网络或本地数据库获 ...

  2. 理解MVC,MVP和MVVM设计模式

    有3个非常受欢迎的MV-*系列设计模式:MVC,MVP,MVVM.他们被广泛应用于不多种结束.这篇文章我回阐述我自己对这3个设计模式的看法. MVC模式: MVC即Model-VIew-Control ...

  3. js架构设计模式——你对MVC、MVP、MVVM 三种组合模式分别有什么样的理解?

    你对MVC.MVP.MVVM 三种组合模式分别有什么样的理解? MVC(Model-View-Controller)MVP(Model-View-Presenter)MVVM(Model-View-V ...

  4. 学习设计模式之MVC、MVP、MVVM

    引言:认真学习了下广义MVC模式下前端怎么写,狭义的MVC其实是有一个变化过程:MVC MVP MVVM,网上看了很多的关于这方面的介绍,以前总是将视图数据逻辑写一个模块,最近尝试分开并用组件式的开发 ...

  5. 浅析设计模式之mvc、mvp、mvvm

    mvc.mvvm.mvp是常见的设计模式,也是常见的设计思想,现对它们进行简要的归纳总结 三种模式的介绍 1.MVC:经典设计模式 View 传送指令到 Controller(控制器) Control ...

  6. js架构设计模式——MVC,MVP 和 MVVM 的图示及简单明了的区别说明

    MVC,MVP 和 MVVM 的图示 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理 ...

  7. 设计模式 --> MVC,MVP 和 MVVM 的图示

    MVC,MVP 和 MVVM 的图示 复杂的软件必须有清晰合理的架构,否则无法开发和维护.MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用. 一.MVC M ...

  8. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  9. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

随机推荐

  1. subprocess

    在没有subprocess这个模块的时候,我们怎么去跟我们的操作系统做交互的呐?下面我们先说说这三个模块:os.system().os.popen().commands. 1.  os.system( ...

  2. [BJOI2019]奥术神杖(分数规划,动态规划,AC自动机)

    [BJOI2019]奥术神杖(分数规划,动态规划,AC自动机) 题面 洛谷 题解 首先乘法取\(log\)变加法,开\(c\)次根变成除\(c\). 于是问题等价于最大化\(\displaystyle ...

  3. KDJ计算公式

    计算方法编辑KDJ的计算比较复杂,首先要计算周期(n日.n周等)的RSV值,即未成熟随机指标值,然后再计算K值.D值.J值等.以n日KDJ数值的计算为例,其计算公式为n日RSV=(Cn-Ln)/(Hn ...

  4. 主成分分析_PCA解释

    粘贴自:http://blog.codinglabs.org/articles/pca-tutorial.html 数据的向量表示及降维问题 向量的表示及基变换 协方差矩阵及优化目标 协方差矩阵对角化 ...

  5. time series analysis

    1 总体介绍 在以下主题中,我们将回顾有助于分析时间序列数据的技术,即遵循非随机顺序的测量序列.与在大多数其他统计数据的上下文中讨论的随机观测样本的分析不同,时间序列的分析基于数据文件中的连续值表示以 ...

  6. python解决上楼梯问题

    假设一段楼梯共n(n>1)个台阶,小朋友一步最多能上3个台阶,那么小朋友上这段楼梯一共有多少种方法 (此为京东2016年笔试题目) 假设n为15,从第15个台阶上往回看,有3种方法可以上来(从第 ...

  7. 【Unity游戏开发】记一次解决 LuaFunction has been disposed 的bug的过程

    一.引子 RT,本篇博客记录的是马三的一次解决 LuaFunction has been disposed 的bug的全过程,事情还要从马三的自研框架 ColaFrameWork 说起.最近,马三在业 ...

  8. H5_0005:JS判断域名和时间有效期的方法

    (function () { var n = { c: function (t, e) { //console.log("c"); //把i(15)的d数组转换成字串 for (v ...

  9. Mathematica 代码

    s1 = ContourPlot3D[x^2 + z^2 == 1, {x, -1, 1}, {y, 0, 1}, {z, -1, 1}] s2 = ContourPlot3D[ y == 1 + S ...

  10. Python——安居客租房信息爬取(以南昌为例)

    前言: 提前安装好所需要的库. 本代码的输入仅需要某个城市的租房地址首页即可,其他自会生成. 使用前请创建所需的目录,或者为代码添加os.makedir() 支持断点重爬,重行运行即可. header ...