代码之家  ›  专栏  ›  技术社区  ›  Michał Turczyn

事件与观察者模式

  •  0
  • Michał Turczyn  · 技术社区  · 6 年前

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

    第一种方法

    它看起来像是由观察者模式解决的经典问题。当感兴趣的对象更改时,它会对订阅该事件的对象调用方法。简单。

    第二种方法

    在感兴趣的对象中定义一个事件,在更改时引发此事件。其他人将聆听此事件并调用其方法。

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

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

    谢谢你的提示!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Michał Turczyn    6 年前

    自从问这个问题以来,很少有人对这个话题有什么看法:

    我觉得这个问题是基于观点的,但这两种方法都有一些利弊:

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

    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 从第二种方法。