Как шаблон Observer отличается от модели, управляемой событиями?

Я разработчик на высоком уровне, но у меня не было много формального обучения, и я, хотя я использовал множество шаблонов дизайна и видел, как они использовались в мои годы как разработчик, никто не уходил с дороги, чтобы сказать, "О, это шаблон наблюдателя, или это шаблон Singleton".

Чтение некоторых шаблонов проектирования, я натолкнулся на шаблон Observer и, похоже, очень похож на способ работы .NET framework. Я что-то пропустил?

Ответ 1

Модель событий .NET - это довольно интегрированная реализация шаблона наблюдателя в среде выполнения общего языка. Языки .NET реализуют наблюдателя непосредственно на их языке, используя встроенную поддержку фреймворка.

В большинстве языков программирования шаблон наблюдателя требует индивидуальной разработки или библиотек.

Он поставляется бесплатно как часть языка в С#, VB.NET и большинстве других языков, построенных для использования CLR.

Ответ 2

От MSDN

Те из вас, кто знаком с знакомством типов, выставленных в FCL, будет обратите внимание, что IObserver, IObservable, или ObservableImpl, присутствуют в Рамочной основы. Основная причина их отсутствие заключается в том, что CLR делает их устаревшими после моды. Хотя вы, безусловно, можете использовать эти конструкций в приложении .NET, введение делегатов и мероприятий предоставляет новые и мощные средства реализация шаблона Observer без разработки конкретных типов предназначенных для поддержки этого шаблона. В факт, поскольку делегаты и события члены первого класса CLR, основой этого шаблона является включенных в самое ядро .NET Framework. Таким образом, FCL делает широкое использование шаблона Observer по всей его структуре.

Ответ 3

Многие модели событий, такие как Java 1.1 и выше, а также модель событий .NET - это в основном реализации шаблона Observer.

Обратите внимание, что это даже относится к более старым механизмам, таким как использование методов обратного вызова в C для обработки событий. Это одно и то же намерение, просто реализовано несколько иначе.

Ответ 4

Почему вы думаете, что должна быть разница?

Вам не кажется, что разработчики .NET также читают шаблоны проектирования?

Собственно, шаблон Observer (как и все в книге) был хорошо известен задолго до того, как они были классифицированы и названы Gof4. Он использовался для реализации модели событий .Net, а также для моделей событий Win32 и Win16 и, возможно, для многих других.