2009-04-30 26 views
13

我是一名高級開發人員,但我還沒有接受過很多正式培訓,儘管我已經使用了許多設計模式,並且看到他們作爲開發人員在我多年中使用過,但沒有人真正意識到這一點。 「哦,這是一個觀察者模式,或者這是一個Singleton模式。」觀察者模式與事件驅動模型有什麼不同?

通過閱讀一些設計模式,我發現了Observer模式,它似乎與.NET框架事件的工作方式非常相似。我錯過了一些關於這方面的基礎知識?

回答

19

.NET事件模型幾乎是公共語言運行時中觀察者模式的集成實現。 .NET語言直接以語言特定的方式實現觀察者,使用框架內置的支持。

在大多數編程語言中,觀察者模式需要定製開發或庫。

它作爲C#,VB.NET和其他大多數使用CLR的語言的語言的一部分免費提供。

1

爲什麼你認爲必須有差異?

難道你不認爲.NET設計人員讀取設計模式以及?實際上,觀察者模式(就像書中的所有內容)早在Gof4被分類和命名之前就已爲人所知。它被用來實現.Net事件模型,以及Win32事件模型,也許還有很多其他模型。

+1

我沒有說有一定有區別。我問我是否錯過了一些東西。(-1積極的非答案) – 2009-04-30 16:33:11

+1

Lol @積極的非答案 – Janie 2009-07-15 18:10:48

+0

這個答案很好+1 – chikak 2009-12-12 14:42:22

4

許多事件模型(如Java 1.1及更高版本)以及.NET事件模型基本上都是Observer模式的實現。

請注意,這甚至適用於較舊的機制,例如在C中使用回調方法進行事件處理。這是一樣的意圖,只是稍有不同。

6

MSDN

那些有傳入FCL暴露的類型,熟悉 將 說明無IObserver,的IObservable, 或ObservableImpl類型存在於 框架。 他們缺席的主要原因是CLR 使他們過時了。 雖然你當然可以在.NET應用程序中使用這些 結構中, 介紹委託和事件 提供的 實現Observer模式 沒有開發專門用於支持此模式的特定類型的 一個新的強有力的手段。在 事實上,作爲代表和事件是CLR的第一級成員, 基礎的這種模式是 合併到.NET Framework的核心。因此,FCL在其整個結構中使得 廣泛使用觀察者模式 。