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