Как шаблон 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 и, возможно, для многих других.