我是一名高级开发人员,但我没有接受过很多正式培训,虽然我已经使用了很多设计模式,并且看到它们在我作为开发人员使用的年代中使用过,但是没有人真的不顾一切地说出来。 “哦,这是一个观察者模式,或者这是一个单身人士模式。”
阅读了一些设计模式,我遇到了Observer模式,它似乎与.NET框架事件的工作方式非常相似。我错过了一些基本的东西吗?
答案 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事件模型,可能还有很多其他模型。