C#中的Observable和Observer(java.util包)等价物

时间:2013-03-13 03:21:43

标签: c# java design-patterns observer-pattern

我按照 Head First Design Patterns 一书中的所有示例,我站在第二章:观察者模式。该章第一部分中包含的基本(脏示例(手工制作))易于在C#中实现(来自Java代码示例)。看看:

工作正常。现在我的问题是在 C#中是否存在来自Java的 Observable 类和 Observer 接口的内置int等价物。参见this image(摘自头部设计模式)

我尝试了各种教程,指南和其他资源来实现这一目标。

此致 约翰奥尔蒂斯

2 个答案:

答案 0 :(得分:2)

观察者模式只是......一种模式。您可以像在Java中一样使用C#中的类和接口实现模式

http://www.fatagnus.com/the-observer-pattern-in-csharp/

要回答你的问题,不,C#中没有与Java关键字等效的保留关键字。也就是说,你可以用类/接口/事件做同样的事情。这是Jon Skeet在Stack Overflow上的一个很好的例子。

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();
    }
}

Super-simple example of C# observer/observable with delegates

http://yoda.arachsys.com/csharp/events.html

答案 1 :(得分:0)

是的,从.NET Framework 4开始,在Java中有Observable类和Observer接口的内置等价物。然而,它们都是接口IObserver,IObservable,它们是通用的 - 这使得它们非常强大。详细说明如何使用它们https://msdn.microsoft.com/library/ee850490(v=vs.110).aspx

当然,不是实现这些接口,您仍然可以编写自己的接口,或者使用事件/委托方法。