GoF (Gang of Four,四人组, 《Design Patterns: Elements of Reusable Object-Oriented Software》/《设计模式》一书的作者:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)并没有把MVC提及为一种设计模式,而是把它当做“一组用于构建用户界面的类集合”。在他们看来,它其实是其它三个经典的设计模式的演变:观察者模式(Observer)(Pub/Sub), 策略模式(Strategy)和组合模式(Composite)。根据MVC在框架中的实现不同可能还会用到工厂模式(Factory)和装饰器(Decorator)模式。我在另一本免费的书“JavaScript Design Patterns For Beginners”中讲述了这些模式,如果你有兴趣可以阅读更多信息。

正如我们所讨论的,models表示应用的数据,而views处理屏幕上展现给用户的内容。为此,MVC在核心通讯上基于推送/订阅模型(惊讶的是 在很多关于MVC的文章中并没有提及到)。当一个model变化时它对应用其它模块发出更新通知(“publishes”),订阅者 (subscriber)——通常是一个Controller,然后更新对应的view。观察者——这种自然的观察关系促进了多个view关联到同一个 model。

对于感兴趣的开发人员想更多的了解解耦性的MVC(根据不同的实现),这种模式的目标之一就是在一个主题和它的观察者之间建立一对多的关系。当这个 主题改变的时候,它的观察者也会得到更新。Views和controllers的关系稍微有点不同。Controllers帮助views对不同用户的输 入做不同的响应,是一个非常好的策略模式列子。

嗯嗯,知道为什么MVC没有被GOF当作【一种】模式来对待了吧?

因为它实际上是三种模式的合体

最新文章

  1. CSS样式收集
  2. Web开发入门疑问收集(不定期更新)
  3. 必须正确理解的---ng指令中的compile与link函数解析
  4. onRetainNonConfigurationInstance和getLastNonConfigurationInstance
  5. commondline 之二 执行类
  6. 使用Office-Word的博客发布功能(测试博文)
  7. Uva 10167 - Birthday Cake 暴力枚举 随机
  8. [未完成]关于POI的使用
  9. vim 分屏 screen
  10. TimePicker,TimePickerDialog以及自定义timepicker(一)
  11. hdu4614(线段树+二分)
  12. 《java入门第一季》之面向对象
  13. Python __init__.py文件的作用
  14. A1123. Is It a Complete AVL Tree
  15. H5实现轮播
  16. mint-ui是什么?怎么使用?说出至少三个组件使用方法?
  17. 《WEB渗透一.信息收集》
  18. ESP8266 使用
  19. jQuery介绍 常用选择器
  20. Java第02次实验提纲(Java基本语法与类库)

热门文章

  1. #leetcode刷题之路14-最长公共前缀
  2. 【usaco】1.1
  3. Magazine Ad CodeForces - 803D(二分 + 贪心,第一次写博客)
  4. JavaScript的兼容小坑和调试小技巧
  5. Scala 语法(一)
  6. Libcurl交叉编译
  7. 常量的三种定义方式和static在c语言中的三种修饰
  8. 关于 VirtualBox6 下的 Win10 虚拟机 与 宿主机 共享文件
  9. Hibernate怎么用
  10. 北京Uber优步司机奖励政策(1月12日)