6

我在想,观察者模式和MVC之间有什么区别。 我有一些在学校用Java编写MVC程序的经验,但没有观察者模式的经验。 (有人告诉我观察者模式意味着我使用Java中的观察者类...我不认为这是一个好的答案。)观察者模式vs MVC

请帮我解决以下问题,谢谢你的关注。

  1. 他们之间有什么区别?观察者模式不为控制器使用单独的类?

  2. 观察者模式和MVC之间的关系是什么?我听说过两种不同的版本。

    • 第一个版本是,MVC是一个体系结构,观察者模式是一种设计模式。他们看起来很相似,因为MVC使用观察者模式。
    • 第二个版本是,观察者模式和MVC是两种不同的设计模式。
  3. 是否可以只使用其中之一?如果是这样,在什么情况下,你使用了一个,为什么?

+0

MVC包含观察者 – lichengwu 2013-03-22 04:59:19

回答

2

有很多与你问的问题有关的文章。 MVC对我来说是一个架构模式,它也包含观察者模式。我相信如果真的在不同的实际项目实现中研究MVC模式,那么它有不止一种设计模式。

它可以放大或缩小。

13
  1. 你在说MVC是说得更多的是建筑风格,而不是一种设计模式 很好的讨论在这里:Is MVC a Design Pattern or Architectural pattern

我希望这回答了你的另外两个问题了。

观察者设计模式是一种行为模式,当我们想要在对象x发生变化的情况下通知对象的所有依赖项(比如x)时使用该模式。 良好读取:http://www.dofactory.com/Patterns/PatternObserver.aspx

,他们都有着密切的关系,如MVC你会从MVC图看 - 例如:在“查看”改变已经被通知到“模式”和“控制” 一个高效实现这种功能的方式是Observer设计模式。

良好读取:http://en.wikipedia.org/wiki/Observer_pattern

In fact the observer pattern was first implemented in Smalltalk's MVC based user 
interface framework. 

希望这有助于!

enter image description here

+0

我在这里看到一个循环。视图发送信号给控制器,控制器将信号发送给发送信号的模型以查看? – whomaniac 2015-04-30 09:12:59

+0

是的。信号在视图中开始和停止。例如,如果您单击一个按钮来斜体显示文本,视图将告诉控制器,该控制器决定“斜体”的含义(逻辑,例如实际选择的任何文本),然后更新文本模型(将该文本块设置为“ITALIC = TRUE“),它告诉视图显示斜体字体的版本。通常你不想要一个无限循环。 – stackexchanger 2015-10-15 19:53:49

+0

但是,如果更新来自模型什么是“视图选择”箭头呢? – binaryguy 2015-12-10 07:54:29