0

我刚开始学习 C# 中的观察者模式,我的要求与观察者模式正好相反:

我们有许多进程正在运行,并且有一个进程监控它们。每个进程都可以(如果发生某些事件)通知父进程。

似乎已经有这个问题“观察者模式的对立面是什么? ”讨论了这个问题,但仍然没有代码示例。

为了理解观察者模式,我在这个答案中引用了 Jon Skeet 下面的代码。

带有委托的 C# 观察者/可观察的超级简单示例

      using System;

      class Observable
      {
          public event EventHandler SomethingHappened;

          public void DoSomething()
          {
          EventHandler handler = SomethingHappened;
          if (handler != null)
          {
            handler(this, EventArgs.Empty);
          }
      }




      class Observer
      {
          public void HandleEvent(object sender, EventArgs args)
          {
             Console.WriteLine("Something happened to " + sender);
          } 
      }



    class Test
    {
        static void Main()
        {
        Observable observable = new Observable();
        Observer observer = new Observer();
        observable.SomethingHappened += observer.HandleEvent;

        observable.DoSomething();
        }
    }

现在让我们假设我们只有一个观察者(父进程)和许多子进程。如何在 C# 的观察者模式中实现这一点。是否有任何其他模式可用于此实现?

提前感谢您的回答。

4

1 回答 1

3

你想解决什么问题?观察者模式是关于将观察者与观察者隔离开来,反之亦然,让您可以灵活地添加新的观察者而无需修改观察者。只需在父进程中提供一个委托,以便在发生有趣事件时触发子进程。它非常适合观察者模式,所以我真的不明白你认为与你的场景如此“相反”的东西。

您可能应该在启动子进程时传入委托并让它们挂在引用上。这样,您就不必为子进程提供一种机制来找到父进程,无论是通过操作系统、单例还是全局变量,这些选项中的任何一个都会破坏单元可测试性。

附带说明一下,当第一次描述观察者模式时,主流的 OO 语言没有类似委托的功能。本质上,委托是集成在 C# 语言和 .NET 平台中的观察者。

于 2013-06-20T09:22:27.557 回答