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

Jef*_*tin 16 .net events design-patterns observer-pattern

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

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

Ree*_*sey 20

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

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

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

  • .NET不是一种语言,.NET是一种运行时环境. (5认同)
  • 真正.我正在引用CLR,而不是特定的语言,但在我的帖子中是非特定的.编辑得更清楚.感谢您的评论. (4认同)

chi*_*kak 6

来自MSDN

那些熟悉FCL中公开的类型的人会注意到框架中不存在IObserver,IObservable或ObservableImpl类型.他们缺席的主要原因是CLR使它们在时尚之后过时.虽然您当然可以在.NET应用程序中使用这些构造,但委托和事件的引入提供了一种新的强大的方法来实现Observer模式,而无需开发专用于支持此模式的特定类型.实际上,由于委托和事件是CLR的第一类成员,因此该模式的基础已合并到.NET Framework的核心中.因此,FCL在其整个结构中广泛使用Observer模式.


Sco*_*eld 5

许多事件模型,如 Java 1.1 及更高版本,以及 .NET 事件模型,基本上都是观察者模式的实现。

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