让我们假设:我们有一个感兴趣的对象和对这个对象感兴趣的多个对象(例如它的状态)。当感兴趣的对象以某种方式改变时,其他人想知道它。
第一种方法
看起来像Observer Pattern解决的经典问题。当感兴趣的对象发生更改时,它会调用订阅该事件的对象上的方法。简单。
第二种方法
在感兴趣的对象中定义事件,在更改时,引发此事件。其他人会听这个事件并在上面调用他们的方法。
一个明显的区别是对象调用方法不同。但是,为什么我们应该使用一种而不是另一种方法?
我知道这些概念,但我正在寻找对问题的深刻理解。
感谢任何提示!
答案 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
。