Рассмотрим схему ниже.
Проблема:
На странице 294 книги Design Pattern , Применимость Первый элемент:
- Когда абстракция имеет два аспекта, один из которых зависит от другого. Инкапсуляция этих аспектов в отдельных объектах позволяет варьировать и повторно использовать их независимо.
Q1: Если вы хотите « варьировать и повторно использовать их независимо », почему вы привязали ConcreteObserver к ConcreteSubject?
Нет, это не вопрос реализации. Когда автор проектировал диаграмму, у него в голове должна была быть общая объектно-ориентированная идея, и я не думаю, что они не заметили, что она вызовет связь между ConcreteSubject и ConcreteObserver.
Q2: Какова цель Тематического интерфейса? Некоторые книги пропускают это.
Нет, это не вопрос реализации. Я считаю это компромиссом - авторы должны иметь некоторое представление об этом, поэтому он решил создать для него интерфейс, независимо от того, что ConcreteObserver, содержащий ссылку на ConcreteSubject, означает, что вам может вообще не понадобиться интерфейс, так как вы можете ' изменить это. Но это только мое мнение.
Для Q1, я думаю, это связано с одним из принципов SOLID.
Что касается Q2, я думаю, что это унификация интерфейса всех конкретных субъектов, но сам интерфейс не будет показан в коде.
Мне нужна другая точка зрения.
![UML of Observer](https://i.stack.imgur.com/VBxwT.png)