在C#中,观察器模式是否已使用事件实现?

时间:2020-03-05 18:44:19  来源:igfitidea点击:

阅读《 Head First设计模式》一书并使用许多其他设计模式之后,我试图理解"观察者"模式。这不是已经使用.NET Framework中的事件实现了吗?

解决方案

回答

是的。观察者模式也称为发布/订阅模式,这正是事件允许我们执行的操作。

回答

没错,事件是观察者模式的实现。不过,我已经阅读了有关仍然写自己的人的讨论,以使他们更加灵活,或者只是避免事件引发语法。

回答

是的,完全一样。

注意:如果我们真的想了解事件,我建议我们学习观察者模式并自己实施一段时间。一旦我们完全理解它,就停止自己做,并使用专业且有据可查的实现,除非我们确实有其他需要。

回答

我会说是的,基于他在Delphi的经验,Anders Heljsberg的意图是使观察者模式成为具有C#事件的一流语言功能。 Anders在Software Engineering Radio上的精彩采访中明确了这一设计意图和其他设计意图。

回答

大多数现代语言都对某些设计模式具有本地支持。有人争辩说,语言在本地支持的模式越多越好,而无需明确实现它们,并且Lisp在这方面很出色。杰夫对此也有话要说。

回答

是的,但是显式地编程观察者模式并因此不使用委托和事件可以使代码调试更加容易。

考虑区别:

public void NotifyObservers()
{
    foreach(Product product in ProductList)
    {
        if (product is IProductObserver)
        {
               product.Update(this)
        }
    }
}

在这里很清楚列表中的哪些产品会收到更改通知。调试时,我们可以检查ProductList ...

使用委托和事件,要查找实际上"订阅"了多少"委托人"来处理事件可能会比较麻烦。