MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。

MVC是三个单词的缩写:Model, View, Controller。

View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性

其中MVC模式是由组合模式、策咯模式、观察者模式的组合,MVC在软件开发中发挥的威力,最终离不开这三个模式的默契配合。

组合模式只在视图层活动, 视图层的实现用的就是组合模式,类层次结构是树状(如下图) owvsetuqu.bkt.clouddn.com/image/desig…

组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。

组合部件(Component):它是一个抽象角色,为要组合的对象提供统一的接口。 叶子(Leaf):在组合中表示子节点对象,叶子节点不能有子节点。 合成部件(Composite):定义有枝节点的行为,用来存储部件,实现在Component接口中的有关操作,如增加(Add)和删除(Remove)。此处简单介绍了解,因为我们客户端几乎有机会使用到。

策略模式是View和Controller之间的关系,Controller是View的一个策略,Controller对于View是可替换的, View和Controller的关系是一对多,在实际的开发场景中,也经常会碰到一个View被多个Controller引用,这即使策咯模式的一种体现

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

观察者模式有两部分组成,被观察的对象和观察者,观察者也被称为监听者。对应到MVC中,Model是被观察的对象,View是观察者,Model层一旦发生变化,View层即被通知更新。View层和Model层互相之间是持有引用的。 我们在开发iOS MVC程序时,因为视图层的UI和Model层的业务逻辑之间隔了一个http,所以不能显示的进行关联,但是他们观察者和收听者的关系却没有改变。当View通过http提交数据给服务器,服务器上的Model接受到数据执行某些操作,再通过http响应将结果回送给View,View(UI)接受到数据更新界面,这不正是一个接受到通知并执行更新的行为吗,是观察者模式的另一种表现形式。

关于MVC各层之间关系所对应的设计模式

View层,单独实现了组合模式

Model层和View层,实现了观察者模式

View层和Controller层,实现了策咯模式

备注: 1:核心思想来自《head first设计模式》 2:博客书写多有借鉴,各位大佬海涵

MVC设计模式深入理解相关推荐

  1. MVC设计模式的理解

    MVC(Model View Controller),是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要 ...

  2. mvc设计模式现在过时了吗_尚学堂115——设计模式、源码分析以及SpringData

    设计模式 什么是设计模式?你是否在你的代码里面使用过任何设计模式? 设计模式是在软件设计中常见问题的通用.可反复使用.多数人知晓的一种解决方案或模板:这些解决方案是在相当长的一段时间内由众多软件开发人 ...

  3. IT兄弟连 JavaWeb教程 MVC设计模式

    MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它强制性地把应用程序的数据展示.数据处理和流程控制分开.MVC把应用程序分成3个核心模块:模型.视 ...

  4. JavaWeb:MVC设计模式

    1. MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controll ...

  5. iOS中MVC设计模式

    在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model V ...

  6. Java-Web JSTL标签库、自定义标签库和MVC设计模式

    目录 一.JSTL标签库 1.什么是JSTL 2.JSTL标签库 3.使用taglib指令导入标签库 4.core标签库常用标签 (1)out和set (2)remove (3)url (4)if ( ...

  7. 201126阶段二单例数据库及MVC设计模式

    目录 一.学习的知识点 一)1 单例模式 一)2 MVC设计模式 一)2.1优点 一)2.1缺点 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 一.学习的知识点 一)1 单例模式 #ifnd ...

  8. 浅谈javaweb三大框架和MVC设计模式

    浅谈javaweb三大框架和MVC设计模式 转载自:http://blog.csdn.net/sunpeng19960715/article/details/50890705 小序:博主以前在学jav ...

  9. 谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

    作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题. [出现频率] [关键考点] MVC的含义 MVC的结构 ...

最新文章

  1. windows7/8 安装mysql5.7
  2. zip、gz压缩文件查看命令zless、less
  3. compare to造句及翻译_compare to造句
  4. 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决
  5. el table 固定表头和首行_表头太太太复杂了,如何批量打印?简单!
  6. python实现用线程爬虫 快速高效爬数据
  7. 使用ANT编译项目报错 com.sun.image.codec.jpeg does not exist 解决方法
  8. php输出字符unicode码,PHP解码unicode编码的中文字符代码分享
  9. 工程实践:给函数取一个好的名字
  10. javascript中的this指向问题
  11. docker-简单操作
  12. 慕课秒杀项目seckill
  13. wifi连接上不能上网怎么办服务器无响应,​wifi连接上不能上网是怎么回事,看完你就恍然大悟了...
  14. MobData活动预告 | 数据智能助力文创产业发展
  15. 小武与箭指offer----list.invert
  16. 程序员买啥游戏机,自己动手做一个体感小游戏
  17. word勾选框涂黑和打勾
  18. 谣言检测论文精读——11.PAKDD2020-SAFE: Similarity-Aware Multi-Modal Fake News Detection
  19. CentOS7 挂载NTFS分区
  20. 代码管理和编辑工具Source Insight 4.0使用介绍

热门文章

  1. 湘南学院校企计算机班,2020湘南学院重点学科名单特色专业有哪些?
  2. python自定义函数详解_python基础教程之自定义函数介绍
  3. 命令构建gradle项目_【Android 修炼手册】Gradle 篇 -- Gradle 源码分析
  4. {}是set类型还是dict类型呢
  5. 动画都要用计算机图形学吗,计算机图形学在电影和动画中的应用.pdf
  6. LeetCode第 3 场双周赛(2019.6.29)第一题:小于 K 的两数之和
  7. SpringContextUtil
  8. 《系统集成项目管理工程师》必背100个知识点-35核实的可交付成果和验收的可交付成果...
  9. centos7 glpi 安装 Fusioninventory-agent 自测部署安装
  10. Java中使用Jedis连接Redis数据库流程