事件与观察者模式

时间:2018-05-22 08:47:54

标签: java c# oop events design-patterns

让我们假设:我们有一个感兴趣的对象和对这个对象感兴趣的多个对象(例如它的状态)。当感兴趣的对象以某种方式改变时,其他人想知道它。

第一种方法

看起来像Observer Pattern解决的经典问题。当感兴趣的对象发生更改时,它会调用订阅该事件的对象上的方法。简单。

第二种方法

在感兴趣的对象中定义事件,在更改时,引发此事件。其他人会听这个事件并在上面调用他们的方法。

一个明显的区别是对象调用方法不同。但是,为什么我们应该使用一种而不是另一种方法?

我知道这些概念,但我正在寻找对问题的深刻理解。

感谢任何提示!

1 个答案:

答案 0 :(得分:0)

自问这个问题以来,关于这个话题的想法很少:

我发现问题是基于观点的,但是两种方法都有其优缺点:

在我看来,基于事件的方法更容易理解:

public class Observable
{
    public event Action<object, object> OnStateChange;

    public void Event()
    {
        // do something
        // choose appropritate args
        OnStateChange.Invoke(null, null);
    }

    /* versus ************************************************/
    Observator[] observators;
    public void InformObservators()
    {
        foreach (Observator observator in observators)
            // choose appropritate args
            observator.UpdateState(null, null);
    }
}

public class Observator
{
    public Observator(Observable observable)
    {
        observable.OnStateChange += UpdateState;
    }
    /* versus ************************************************/
    public void UpdateState(object arg1, object arg2)
    {

    }
}

我们可以看到,Observator模式在两种方法中并没有太大区别,但是Observable类将具有更简单的方法来通知更改,即Event方法,它更容易实现我认为比第二种方法更InformObservers