Observer模式与事件驱动模型有何不同?

时间:2009-04-30 16:20:06

标签: .net design-patterns events observer-pattern

我是一名高级开发人员,但我没有接受过很多正式培训,虽然我已经使用了很多设计模式,并且看到它们在我作为开发人员使用的年代中使用过,但是没有人真的不顾一切地说出来。 “哦,这是一个观察者模式,或者这是一个单身人士模式。”

阅读了一些设计模式,我遇到了Observer模式,它似乎与.NET框架事件的工作方式非常相似。我错过了一些基本的东西吗?

4 个答案:

答案 0 :(得分:20)

.NET事件模型几乎是公共语言运行库中观察者模式的集成实现。 .NET语言使用框架内置的支持,直接以特定语言的方式实现观察者。

在大多数编程语言中,观察者模式需要定制开发或库。

它是免费的,是C#,VB.NET语言的一部分,以及为使用CLR而构建的大多数其他语言。

答案 1 :(得分:6)

来自MSDN

  

那些熟悉的人   在FCL中暴露的类型将   注意没有IObserver,IObservable,   或ObservableImpl类型存在于   框架。主要原因   他们的缺席是CLR的事实   让它们在时尚之后过时。   虽然你当然可以使用这些   .NET应用程序中的构造   代表和活动的介绍   提供了一种新的强大手段   实现Observer模式   没有开发特定类型   致力于支持这种模式。在   事实上,正如代表和事件一样   CLR的头等成员,   这种模式的基础是   并入了核心   .NET Framework。因此,FCL制作   广泛使用Observer模式   整个结构。

答案 2 :(得分:4)

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

请注意,这甚至适用于较旧的机制,例如在C中使用回调方法进行事件处理。这是相同的意图,只是略有不同。

答案 3 :(得分:1)

为什么你认为必须有区别?

你不认为.NET设计师也读过设计模式吗?

实际上,观察者模式(就像书中的所有内容)早在被Gof4分类和命名之前就已为人所熟知。它用于实现.Net事件模型,以及Win32& Win16事件模型,可能还有很多其他模型。