Чем паттерн Observer отличается от модели, управляемой событиями? - PullRequest
15 голосов
/ 30 апреля 2009

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

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

Ответы [ 4 ]

20 голосов
/ 30 апреля 2009

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

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

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

6 голосов
/ 12 декабря 2009

С MSDN

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

4 голосов
/ 30 апреля 2009

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

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

1 голос
/ 30 апреля 2009

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

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

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

...