为什么.NET没有像Java一样内置观察者模式?

3
我想知道为什么.NET框架没有类似于Java的(Observer/Observable)接口对吗?
编辑: 是的,我知道事件和委托,但使用这些接口不是一种简单和书本式的设计模式方法吗?

1
使用这些接口是一种简单而书呆子的方法,不是吗?如果这就是问题,那么这并不是一个真正的问题! - Daniel Earwicker
5个回答

14

6

由于.NET具有实际事件和委托,而Java缺乏这些基本构造,并不得不采用丑陋的技巧(您的Observable接口)来传递“方法指针”。


丑陋的黑科技?那么为什么在.NET4.0中引入了Observable接口呢?(请参见下一个答案) - Arseny
1
@Arseny - 它们的名称相似,但工作方式完全不同。 - Daniel Earwicker
1
这是一个解释问题,有些语言采用一种方式,而其他语言则采用另一种方式。在我看来,这个陈述并不是非常有帮助...而.Net提供了IObservable来提供此功能。 - AxelEckenberger
对于由好人创造的好语言,使用不良言辞是不好的。 - Odomontois
在C#中,可观察模式还有其他用途,例如WPF中的Observable Collections。但是对于你特定的问题,C#在其语法(和il-asm代码)中有更好的替代方案。 - Blindy

4

您可以使用事件和混乱的代码来实现同样的功能,但是当它们锁定到您的非可处理内存块时,您将为清理它们而疯狂。

如果您还没有 .Net 4,请使用众所周知的观察者模式并按传统方式手动输入它。

观察者模式不仅仅是手写事件,它是可重复使用和可扩展代码的基础。它也是一种更加解耦和优雅的解决方案。


3
你可以使用事件来实现类似的功能。同时,你也可以轻松地实现自己的观察者模式。它应该是最容易实现的模式之一:http://en.wikipedia.org/wiki/Observer_pattern 至于为什么,我不确定。

1

你去哪里了?这是关于事件和委托的。是的,这是一种hack方法,但它有效,并且更多的人喜欢使用语言内置的功能而不是自己输入设计模式。语言特性已经调试完毕,可以直接使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接