Squeak.ru - шаблоны программирования

Шаблон наблюдателя. Всегда ли наблюдаемый объект должен быть абстрактным?

Я новичок в разработке шаблонов, я изучаю шаблон Observer, для этого я зашел на многие сайты, где нашел приведенную ниже диаграмму UML.

введите здесь описание изображения

Итак, мой вопрос касается дизайна UML или класса. Если целью шаблона наблюдателя является уведомление наблюдателей об изменении состояния субъекта/объекта, почему субъект должен быть абстрактным, не может ли он быть ConcreteSubject напрямую, как показано ниже:

введите здесь описание изображения

Каковы недостатки или нарушения, если мы создадим тему как ConcreteSubject.


Ответы:


1

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

Более общей альтернативой было бы предоставление интерфейса. Или, возможно, абстрактный класс на самом деле реализует более общий интерфейс, который определяет только те методы, которые должны быть реализованы.

Другими словами, преимущество предоставления интерфейса заключается в том, что вам не нужно знать класс, который его реализует. Преимущество использования абстрактного класса заключается в том, что у вас есть базовая реализация методов, необходимых для добавления или удаления наблюдателей и отправки им уведомлений. И вы пользуетесь этим, производя класс.

08.10.2017

2

Если сделать Concrete Observer зависимым от Concrete Subject, это решит одну проблему [приведение типов в методе обновления как update(ConcreteSubject cs)], но за счет общего характера Pattern.

Конкретная тема и Абстрактная тема (наблюдаемая) имеют четкое разграничение обязанностей, а именно: реализовывать бизнес-логику и быть наблюдаемой во всем приложении и заботиться о наблюдателях.

Если мы избежим использования темы, каждый бизнес-класс, требующий наблюдателей (могут быть добавлены позже), должен будет повторять код Subject. (Расширение одного конкретного предмета из другого конкретного предмета является нарушением ООП).

Лучше всего использовать Abstract Subject и оставлять открытыми расширения и повторное использование кода.

09.10.2017
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...