Почему ConcreteObserver содержит ссылку на ConcreteSubject в шаблоне Observer? - PullRequest
1 голос

Рассмотрим схему ниже.

Проблема:

На странице 294 книги Design Pattern , Применимость Первый элемент:

  • Когда абстракция имеет два аспекта, один из которых зависит от другого. Инкапсуляция этих аспектов в отдельных объектах позволяет варьировать и повторно использовать их независимо.

Q1: Если вы хотите « варьировать и повторно использовать их независимо », почему вы привязали ConcreteObserver к ConcreteSubject?

Нет, это не вопрос реализации. Когда автор проектировал диаграмму, у него в голове должна была быть общая объектно-ориентированная идея, и я не думаю, что они не заметили, что она вызовет связь между ConcreteSubject и ConcreteObserver.

Q2: Какова цель Тематического интерфейса? Некоторые книги пропускают это.

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

Для Q1, я думаю, это связано с одним из принципов SOLID.
Что касается Q2, я думаю, что это унификация интерфейса всех конкретных субъектов, но сам интерфейс не будет показан в коде.

Мне нужна другая точка зрения.

UML of Observer

1 Ответ

1 голос
/ 05 апреля 2019
  1. Я считаю, что " варьируются и повторно используют их независимо ", следует сказать, что вы можете варьировать наблюдателей и повторно использовать субъект ,Обратное не имеет смысла.Страница 296 противоречит диаграмме.

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

    Очевидно, что вы не можете повторно использовать наблюдателя без его объекта, когда естьпрямая зависимость от конкретной реализации.

  2. Повторное использование кода кажется наиболее очевидной целью абстракции Subject;но я также мог бы вообразить компоненты, соединяющие компоненты контекста вместе, где разные конкретные субъекты не имеют значения (возможно, потому что наблюдатель хочет уведомить обо всех изменениях данных, стр. 297: « Наблюдение более чем за одним субъектом. ») ВВ случае, когда наблюдатель сохраняет ссылку на своего субъекта и регистрирует себя, абстракция субъекта может не потребоваться.

...