在阅读Head First Design Patterns书籍并使用大量其他设计模式之后,我试图了解Observer模式。这不是已经使用.NET Framework中的事件实现吗?在C#中,是不是已经使用事件实现的观察者模式?
回答
是的。观察者模式也被称为发布/订阅模式,这正是事件允许你做的事情。
这是正确的,事件是观察者模式的实现。尽管如此,我还是阅读了一些讨论,他们仍然自己写,为他们提供更多的灵活性,或者只是为了避免事件发生的语法。
是的,它是一样的。
注意:如果您真的想了解事件,我建议您学习观察者模式并自行实施一段时间。一旦你完全理解了它,就不要自己动手做,除非你真的需要做别的事情,否则你应该使用专业且有据可查的实现。
我会说是的,这是Anders Heljsberg基于他在Delphi中的经验使观察者模式成为C#事件的一流语言特性。安德斯在Software Engineering Radio的优秀采访中表达了这一设计意图和其他设计意图。
大多数现代语言都支持某些设计模式。有人认为,语言越好,它们本身支持的模式就越多,而不需要明确地实现它们,Lisp在这方面非常出色。杰夫也有something to say。
是的,但是显式编程观察者模式,因此不使用委托和事件可以更容易地调试代码。
考虑差异:
public void NotifyObservers()
{
foreach(Product product in ProductList)
{
if (product is IProductObserver)
{
product.Update(this)
}
}
}
这是很清楚什么样的产品列表中得到通知的变化。在调试时,您可以检查ProductList ...
使用委托和事件可以更加麻烦地找出有多少“委托”实际上“订阅”来处理事件。
我不喜欢鼓励开发者重新实现而不是重用的想法。 – 2008-09-24 05:44:08
不,他们达到相同的意图,但他们是不同的。 我会说观察者模式对于实现某些功能性编程可以轻松实现的功能来说是一种过度设计的攻击,并且.NET事件使用函数式编程来实现相同的目标。
Microsoft本身使用事件和委托是使用Observer模式的c#方式。 使用一些基本的命名约定为事件和代表他们命名他们自己的模式“事件模式”它完全相同的东西提供了一些额外的优势,比传统的观察者模式。
“事件模式”是MSDN Library中里面的“探索Observer设计模式”文章描述。
基于事件和委托,FCL中使用了观察者模式相当广泛。 FCL的设计人员充分认识到这种模式的内在力量,将其应用于整个框架的用户界面和非UI特定功能。然而,这种用法在基础Observer模式上略有变化,框架团队称之为事件模式。一般来说,这种模式表示为事件通知过程中涉及的委托,事件和相关方法的正式命名约定。 Microsoft建议利用事件和委托的所有应用程序和框架采用这种模式,虽然在CLR或标准编译器
在此基础上检查Observer模式的不执行,应当显而易见,这种模式提供一个理想的机制,以确保应用程序中的对象之间的清晰界限,而不管它们的功能(用户界面或其他)。尽管通过回调(使用IObserver和IObservable接口)实现起来相当简单,但CLR的委托和事件概念处理大部分“繁重工作”,并降低了主体和观察者之间的耦合程度。
- 1. 实现观察者模式
- 2. 使用winforms实现观察者模式
- 3. 实现C++ -to-lua观察者模式?
- 4. 在C#中使用委托实现的观察者模式?
- 5. 在Magento中实现事件观察者
- 6. 使用GreenDao实现事件监听器/观察者模式
- 7. 是否可以使用REST API实现观察者模式
- 8. 是否值得在PHP中实现观察者模式?
- 9. 实现观察者模式的片段
- 10. 通过RMI实现观察者模式
- 11. 如何在C++中实现观察者模式
- 12. Ninject/NHibernate事件+观察者模式
- 13. 自定义事件(观察者模式)
- 14. 在Delphi中实现观察者模式的最佳方式
- 15. 观察者模式 - 观察者创建
- 16. 观察者模式Java - 使用线程的多个观察者
- 17. 使用Spring依赖注入的观察者模式实现
- 18. 观察者模式的线程化实现 - C++
- 19. 当观察者希望观察不同的项目时,实现观察者模式
- 20. 如何实现观察者模式以在asp.net中使用用户控件
- 21. 在.NET中实现观察者模式的类的名称?
- 22. C中的观察者模式#
- 23. 仍然是观察者模式?
- 24. 如何在C++中实现观察者模式,在JNI中调用Java方法
- 25. 观察者模式
- 26. 如何使用Java RMI实现观察者模式?
- 27. 使用了weak_ptr来实现观察者模式
- 28. 如何使用boost :: signals来实现观察者模式?
- 29. C++如何使用TR1实现观察者模式模板基类
- 30. 如何应用观察者模式如果观察者也是主体
一个稍微不同的回答这个问题,看http://stackoverflow.com/questions/1023329/observer-pattern-implemented-in-c-sharp-with-delegates – kmote 2012-02-14 14:25:14