MVC【最常用】:

  • MVC的定义:
    M:业务逻辑处理。【业务MODEL】
    V:处理数据显示的部分。【如xml布局文件】
    C:Activity处理用户交互的问题。【也就是Activity在MVC中扮演着C的角色】
  • MVC的特点:
    ①、耦合性低。
    ②、可扩展性好。
    ③、模块职责划分明确。
  • MVC的实例详解:

    而当请求成功之后则会在Activity中进行回调处理:

    也就是Activity业务控制的作用,MVC的C的角色。

  • 总结:
    ①、利用MVC设计模式,使得项目有了很好的可扩展和维护性。
    ②、controller(控制器)是一个中间桥梁的作用。
    ③、什么时候适合使用MVC模式呢?当一个项目很小,

MVP【如今越来越流行】:

它的由来也是基于MVC框架的进一步改良,对于Activity的C层里面既有业务代码,也有显示层的东东,这就显示Activity这一层显得非常的冗余和臃肿,所以下面来了解一下MVP:

MVP定义:

M:依然是业务逻辑和实体模型。
V:对应于Activity,负责View的绘制以及与用户交互。

P: 负责完成View与Model之间的交互。【这是与MVC最大的区别】
下面用一张图来直观的感受一下MVC和MVP的区别:

可以看到MVC中的model与C和V都有关联,而在MVP中Model只与P层关联,所以MVC与MVP最大的区别就在于MVC的M是直接可以与V进行交互的,而在MVP中M只与P进行交互。

MVP实例讲解:

下面以用户登录功能为例,先看一下代码的结构:

下面具体来看一下代码,先看M层:

然后业务层登录方法:

而接着到View层了,这里需要以接口的形式来定义,具体如下:

然后在Activity中去实现这些接口,具体如下:

接着再来看一下P类的设计,这也是MVP最独特的,具体如下:

从这个P中可以看到就是用来控制业务逻辑并调用显示层的一些接口来达到组装的效果。

MVVM【用得较少】:

它是Model-View-ViewModel的缩写,这个反正在实际开发中用得比较少,虽说它是更高级的一种模式,不过也是在面试中会大量被问到的,所以也需要对其进行了解,先来看一张图:

1、View:对应于Activity和XML,负责View的绘制以及与用户交互,它是不能做任何与业务相关的操作。

2、Model:实体模型,这跟咱们平常定义的Model层是不一样的。

3、ViewModel:负责完成View与Model之间的交互,负责业务逻辑。它不能做任何与UI相关的操作,也就是不能持有任何View的引用。

关于MVVM与MVP的区别可以用这篇博客【https://www.jianshu.com/p/a15d6e68d93f】所介绍的,如下:

如博主所说明的:“可以看到 ViewModel 承担了 Presenter 中与 view和 Model 交互的职责,与 MVP模式不同的是,VM与 V 之间是通过 Datebingding 实现的,而 P是持有 View 的对象,直接调用 View 中的一些接口方法来实现。ViewModel可以理解成是View的数据模型和Presenter的合体。**它通过双向绑定(松耦合)解决了MVP中Presenter与View联系比较紧密的问题。 **”。

热门前沿知识相关面试问题-MVC/MVP/MVVM架构设计模式面试问题详解的更多相关文章

  1. 前端mvc mvp mvvm 架构介绍(vue重构项目一)

    首先 我们为什么重构这个项目 1:我们现有的技术是前后台不分离,页面上采用esayUI+jq构成的单页面,每个所谓的单页面都是从后台胜场的唯一Id 与前端绑定,即使你找到了那个页面元素,也找不到所在的 ...

  2. 热门前沿知识相关面试问题-android插件化面试问题讲解

    插件化由来: 65536/64K[技术层面上]随着代码越来越大,业务逻辑越来繁杂,所以很容易达到一个65536的天花板,其65536指的是整个项目中的方法总数如果达到这个数量时则不无法创建新的方法了, ...

  3. 实例说明MVC,MVP,MVVM架构

    很早就知道有这三个概念,但是一直都不清楚是怎么回事,在网上搜索,都是泛泛而谈,没有具体例子,新手是看不懂的,直到找到这篇文章,我对这三个架构有了更清楚的了解. 从一个简单的例子去研究这三个架构. 注意 ...

  4. android MVC && MVP && MVVM分析和对比

    相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...

  5. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  6. MVC, MVP, MVVM比较以及区别(上)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  7. MVC, MVP, MVVM比较以及区别

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  8. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  9. [转]MVVM架构~mvc,mvp,mvvm大话开篇

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

随机推荐

  1. [机器学习理论] 降维算法PCA、SVD(部分内容,有待更新)

    几个概念 正交矩阵 在矩阵论中,正交矩阵(orthogonal matrix)是一个方块矩阵,其元素为实数,而且行向量与列向量皆为正交的单位向量,使得该矩阵的转置矩阵为其逆矩阵:  其中,为单位矩阵. ...

  2. 《机器学习实战(基于scikit-learn和TensorFlow)》第七章内容学习心得

    本章主要讲述了“集成学习”和“随机森林”两个方面. 重点关注:bagging/pasting.boosting.stacking三个方法. 首先,提出一个思想,如果想提升预测的准确率,一个很好的方法就 ...

  3. Summary of OAuth 2.0

    Summary of OAuth 2.0 1 Problems: This pattern of applications obtaining user passwords obviously has ...

  4. Python 筛选前缀文件

    筛选某一文件下内具备某一前缀的文件: for file in files filename = os.path.listdir(file) if 'qianzhui--' in filename: # ...

  5. 记录sql中统计近五天数据的口径(While+IF)

    话不多说,直接上码↓ IF OBJECT_ID('tempdb..#Table') IS NOT NULL BEGIN DROP TABLE #Table; END; DECLARE @tbRange ...

  6. (模板)luoguP3806(树上点分治模板题)

    点分治的写法1: 题目链接:https://www.luogu.org/problem/P3806 题意:给出一颗带边权的树,结点数n<=1e4,每条边有权值<=1e4,有m组询问(m&l ...

  7. 【转帖】NAT类型及转换原理深入剖析

    NAT类型及转换原理深入剖析 http://www.m6000.cn/other/459.html  2018年8月4日16:40:14发表评论 297 views 大家都知道.NAT是位于内.外网之 ...

  8. T100弹出是否确认窗体方式

    例如: IF NOT cl_ask_confirm('aim-00108') THEN CALL s_transaction_end(') CALL cl_err_collect_show() RET ...

  9. python基础知识0-2

    # !/usr/bin/env python # 提示输入用户名和密码 # 验证用户名和密码#     如果错误,则输出用户名或密码错误#     如果成功,则输出 欢迎,XXX! import ge ...

  10. frp基础操作

    [common]privilege_mode = true privilege_token = ****bind_port = 7000 dashboard_user = 444444dashboar ...