【问题标题】:Why .NET doesn't have built-in Observer pattern like Java? [closed]为什么 .NET 没有像 Java 这样的内置观察者模式? [关闭]
【发布时间】:2011-03-30 19:59:33
【问题描述】:

我想知道为什么 .NET 框架没有类似于 Java 功能的 pair (Observer/Observable) 接口?

编辑: 是的,我知道事件和委托,但是使用这些接口是这个 DP 的一种简单而书本的方法,不是吗?

【问题讨论】:

  • "使用这些接口是这个 DP 的一种简单而书卷气的方法,不是吗?" - 如果是这个问题,那么这不是什么大问题!

标签: c# design-patterns observer-pattern .net-2.0


【解决方案1】:

您可以使用事件实现相同的目的。您也可以轻松实现自己的观察者模式。它必须是最容易实现的模式之一:http://en.wikipedia.org/wiki/Observer_pattern

至于为什么部分。不确定。

【讨论】:

    【解决方案2】:

    因为 .NET 有实际的事件和委托。 Java 缺乏这些基本结构,不得不求助于丑陋的 hack(你的 Observable 接口)来传递“方法指针”。

    【讨论】:

    • 丑陋的黑客?那么为什么在 NET4.0 中引入 Observable 接口呢? (见下一个答案)
    • @Arseny - 他们有相似的名字,但工作方式完全不同。
    • 这是一个解释问题,有些语言以一种方式做,有些则另一种。恕我直言,该声明不是很有帮助......并且.Net确实提供了一个IObservable来提供此功能。
    • 用坏词来形容好人创造的好语言是不好的。
    • C# 中的可观察模式还有其他用途,例如 WPF 中的可观察集合。但特别是对于您的问题,C# 在其语法(和 il-asm 代码)中有更好的选择。
    【解决方案3】:

    在 .NET 4 中 确实如此System.IObservable<T>System.IObserver<T>(它们是 DualIEnumerable<T>IEnumerator<T>)。查看Reactive Extensions (Rx) 项目,了解这些接口与异步事件的组合使用。

    更一般地说,观察者模式在 .NET 中通过事件更好地服务。

    【讨论】:

      【解决方案4】:

      你去哪儿了。它被称为事件和委托。是的,它是一种 hack,但它可以工作,而且更多的人更喜欢使用内置功能的语言,而不是你必须自己输入的设计模式。语言功能已经调试完毕,可以使用了。

      【讨论】:

        【解决方案5】:

        您可以使用事件和意大利面条式代码实现相同的目的,当它们将自己锁定在您的非一次性内存块中时,它们会让您发疯地试图清理它们。

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

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

        【讨论】:

          猜你喜欢
          • 2023-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-11
          • 2012-07-22
          相关资源
          最近更新 更多