Шаблон дизайну спостерігача проти «слухачів»


136

Мені здається, що модель дизайну Observer, описана в GOF, насправді те саме, що слухачі, знайдені в різних наборах інструментів. Чи є різниця між поняттями, чи слухачі та спостерігачі справді одне й те саме.

(Я не шукаю конкретної реалізації комп'ютерної мови, я просто хочу зрозуміти різницю (якщо така є) з точки зору дизайну. Так, я знаю, що на SOF є кілька відповідей на подібні питання, але вони кореняться у конкретних питаннях щодо певних мов - я шукаю дизайнерську відповідь, а не мовну відповідь.)


19
У першому один код спостерігає за іншим кодом руху, а в другому один код прослуховує інший код для будь-якого шуму.
nate c

2
Що означає ГОФ?
dekaru

Відповіді:


60

Будь термін "слухач" відноситься до структури спостерігача чи ні, залежатиме від контексту. Наприклад, "Слухачі подій" Java Swing є частиною реалізації шаблону спостерігача, в той час як .Net "слухачі слідів" - ні.

Не рідкість автори фреймворків призначати різні імена компонентам, які беруть участь у заданій реалізації шаблону, але офіційні назви шаблонів зазвичай використовуються при обговоренні самих шаблонів.

Що стосується дизайну, на реалізацію заданого шаблону часто впливатиме мова та платформа, що використовується. Таким чином, певна реалізація шаблону Observer у заданих рамках (що може трапитися з використанням терміна "слухач" для опису ролі ConcreteObserver) може дещо відрізнятися від описаного в книзі "Шаблони дизайну".


26

Опис спостерігача в дизайнерських патернах від Gamma et et є двостороннім. ін. (GoF).

У своєму описі спостерігача один із ConcreteObservers може сигналізувати про зміну свого предмета. Суб'єкт, який містить список усіх ConcreteObservers, потім повідомляє його список. Всі ConcreteObservers, включаючи основний двигун, потім реагують у відповідних випадках.

Загальні реалізації Слухачів, схоже, всі реагують на події ззовні.

Отже, я б сказав, що слухач є менш узагальненим випадком спостерігача.


4

Слухач цілком може бути реалізацією структури спостерігача. Слухач, по суті, чекає, коли на даному об'єкті відбудеться подія, що і робить спостерігач.

Я знаю, що ви не отримуєте відповіді щодо конкретної мови, але важко говорити про ці речі в рефераті. Тож якби я досліджував це в .NET, я схилявся б відкрити збірку, що містить слухача в .NET Reflector, що дозволить мені розібрати збірку і перевірити її логіку на зразок конструкції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.