它们之间的交互有以下几种:
      1.当用户在视图上做任何需要调用模型的操作时,它的请求将被控制器截获。
      2.控制器按照自身指定的策略,将用户行为翻译成模型操作,调用模型相应逻辑实现。
      3.控制器可能会在接到视图操作时,指定视图做某些改变。
      4.当模型的状态发生改变时,将通过某种方式通知视图。
      5.视图可以从模型获取状态,从而改变自己的显示。
我要引入一个设计模式,叫观察着(Observer)模式。

在MVC中,视图是观察者,模型是被观察者,当模型状态改变时,调用所有观察者的Update方法,通知视图模型有变,视图在Update方法里写下响应代码,完成操作。通过这个方法,视图和模型就可以在仅依赖接口的情形下进行交互,而不必强耦合,而且在模型不变的情况下,视图可以随意替换。(只要实现了IObserver)

2. 在MVC中另一个使用接口的地方就是控制器,这里我要首先引入一个设计模式:策略模式(Strategy)。在MVC中,控制器就使用了这个模式。
刚才我说过,视图负责与用户交互,但是,它只负责界面显示部分,至于当用户做了某个操作(如单击某个按钮)后系统应该怎么反应,视图并不负责,它只是将这个动作交给控制器,控制器根据内置的策略,将用户操作翻译成模型的逻辑。这就是说,同一个视图、同一种操作,模型可以做出不同的反应,这取决与控制器的内置策略。所以,我们的系统中可以有很多控制器,它们有不同的策略,当视图希望改变策略时,它可以更换控制器。怎么实现呢?这就需要视图不能和具体控制器耦合,而是要仅依赖一个控制器接口(如IController),并聚合一个IController的实例。当希望更改策略时,可以在系统运行时动态更换Controller,这就是策略模式的实现。

转载于:https://www.cnblogs.com/james1207/p/3297167.html

MVC是一种用于表示层设计的复合设计模式相关推荐

  1. 13 种用于网站设计和开发的 React 图库

    原文链接:https://tzy1997.com/articles/rea323su/ 在本文中,我们将介绍13种用于网站设计和开发的 React 图片库示例. React & CSS Gri ...

  2. 【设计模式】叩心自问:什么是设计模式? 设计模式的目的是什么?设计模式依据哪些(七种)原则设计的?设计模式有哪些?分类?

    aas 叩心自问 1 :设计模式的目的是什么? 叩心自问 2 :什么是设计模式? 叩心自问 3:设计模式依据哪些(七种)原则设计的? 3.1.单一职责原则 3.2.接口隔离原则 3.3.依赖倒转原则 ...

  3. c语言中用于程序化结构设计的三种结构是,c语言中用于结构化程序设计的3种基本结构是...

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. c语言中用于结构化程序设计的3种基本结构是顺序结构.选择结构.循环结构. 顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出 ...

  4. PetShop之表示层设计 - 《解剖PetShop》系列之六

    六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心.正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的.一件交付给客户使用 ...

  5. PetShop之表示层设计(转载)

    <解剖PetShop>系列之六 六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心.正如人与人的相交相识一样,初次 ...

  6. PetShop之表示层设计

    PetShop之表示层设计 <解剖PetShop>系列之六 六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心.正 ...

  7. [wayfarer]PetShop之表示层设计

    原文地址: http://www.cnblogs.com/wayfarer/archive/2006/11/11/557933.html <解剖PetShop>系列之六 六 PetShop ...

  8. petshop详解之六:PetShop之表示层设计

    六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心.正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的.一件交付给客户使用 ...

  9. (六)PetShop之表示层设计

    本文转自:张逸:晴窗笔记 http://www.cnblogs.com/wayfarer/archive/2006/11/11/557933.html <解剖PetShop>系列之六 六 ...

最新文章

  1. KB244036_PXE 客户端、DHCP 和 RIS 服务器之间的 PXE 交互过程说明
  2. 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧(转)...
  3. kafka如何彻底删除topic及数据
  4. 运行虚拟机报错:vmware workstations与devicecredential不兼容(终极解决方案)
  5. python统计程序运行时间-如何方便地统计 Python 程序每一个函数、每一行代码执行所花的时间?...
  6. topsis综合评价法_DRG如何评价临床医师绩效——以肿瘤科为例
  7. 无人驾驶之入门(车联网和5G)
  8. mysql主从复制读写分离_MySQL主从复制与读写分离的工作原理
  9. kubeadm部署k8s1.9高可用集群--1集群概述
  10. linux的源码安装步骤(以安装nginx为例)
  11. 表贴电阻尺寸与什么有关_贴片电阻简介:功率大小与尺寸对应表
  12. Java实现UDP组播(multicast)和单播(unicast)简单例子——局域网内
  13. 失眠 我们该怎么办?
  14. 怎么把录音导入库乐队_库乐队导入音乐的具体流程讲述
  15. 一个运维项目的大概流程,附带20种运维开发工具
  16. 从手动测试,到自动化测试老司机,只用了几个月,我的薪资翻了一倍
  17. 翻译: ChatGPT 的激发敬畏、恐惧、特技和试图绕过其护栏的尝试
  18. ecshop 2.7.2安装
  19. 双路服务器单路运行,双路服务器和单路服务器有什么区别?
  20. 菜鸟窝-数据结构与算法之数组实现队列

热门文章

  1. BLAS+BLACS+LAPACK+SCALAPACK安装
  2. 使用TensorFlow进行深度学习-第2部分
  3. 使用Xcap发送网络数据包
  4. C语言高级编程:extern用法
  5. 银行假流水怎么识破?
  6. 九十年代以来的文学事变与60后70后80后作家的写作之三
  7. Javascript获取文件自身URL路径
  8. VHDL中的左移函数
  9. numpy安装_Python进阶之NumPy快速入门(一)
  10. wpf表格datagrid拖动列_这才是老板要的Excel表格,你做的太丑了!