我刚开始学习C#中的观察者模式,我的要求与观察者模式正好相反:
我们有许多进程正在运行,一个进程监视所有进程。 每个进程都可以(如果发生某些事件)通知父进程。
似乎已经有这个问题“What is the opposite of the observer pattern?”讨论了这个问题,但仍然没有代码示例。
为了理解观察者模式,我在这个答案中引用了Jon Skeet的下面这段代码。
Super-simple example of C# observer/observable with delegates
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#中以观察者模式实现它。是否可以使用任何其他模式进行此实现?
提前感谢您的回答。
答案 0 :(得分:3)
你想解决什么问题?观察者模式是关于将观察者与观察者隔离,反之亦然,使您可以灵活地添加新观察者而无需修改观察者。只需在父进程中提供一个委托,以便在发生有趣事件时触发子进程。这对于Observer模式来说非常经典,所以我并没有真正得到你认为与你的场景“相反”的东西。
您应该在启动子进程时传入委托,并让它们挂起到引用。这样,您不必为子进程提供机制来查找父进程,无论是通过操作系统,通过Singleton还是通过全局变量,任何选项往往会破坏单元可测试性。
作为旁注,当首次描述Observer模式时,主流OO语言没有类似委托的功能。从本质上讲,代表是包含在C#语言和.NET平台中的观察者。