Java: ООП
Теория: Паттерны (продолжение)
Наблюдатель (Observer)
Паттерн "Наблюдатель" — это поведенческий шаблон проектирования, который определяет зависимость "один ко многим" между объектами. Когда один объект (издатель) изменяет свое состояние, все его зависимые объекты (наблюдатели) автоматически уведомляются и обновляются. Этот паттерн часто используется в системах, где необходимо поддерживать согласованность между различными компонентами, например, в пользовательских интерфейсах или в системах событий
В системе выделяются два типа объектов: "издатель" и "наблюдатели". Издатель хранит состояние и управляет списком наблюдателей, которые должны быть уведомлены о его изменениях. Наблюдатели могут подписываться на изменения состояния издателя. Это позволяет им получать уведомления, когда состояние изменяется, без необходимости постоянно проверять его. Когда состояние издателя изменяется, он вызывает метод уведомления, который оповещает всех зарегистрированных наблюдателей о произошедших изменениях. Наблюдатели затем могут обновить свое состояние в соответствии с новыми данными.
Интерфейсы, которые должны реализовывать издатель и наблюдатели:
Классы издателя и наблюдателя:
Использование:
Паттерн "Наблюдатель" может привести к тому, что наблюдатели будут получать уведомления о ненужных изменениях в состоянии объекта, что может вызвать избыточные операции и снизить эффективность работы системы. Кроме того, излишняя сложность кода, связанная с управлением множеством наблюдателей и их взаимодействиями, может привести к ошибкам и ухудшению производительности. Если порядок уведомления наблюдателей имеет значение, разработчикам придется следить за этим вручную, что добавляет дополнительную нагрузку и усложняет поддержку кода
Стратегия
Паттерн "Стратегия" - это поведенческий шаблон проектирования, который позволяет определить семейство алгоритмов, инкапсулировать каждый из них и сделать их взаимозаменяемыми. Этот паттерн позволяет клиентам выбирать алгоритм, который будет использоваться для выполнения определенной задачи, без изменения кода клиента
Интерфейс и классы стратегий
Класс для выбора стратегий в зависимости от текущих условий
Пример использования
Паттерн "Стратегия" имеет недостатки, такие как увеличение количества классов и усложнение архитектуры системы при добавлении новых стратегий. Кроме того, реализация различных стратегий может привести к дублированию кода
Состояние
Паттерн "Состояние" - это поведенческий шаблон проектирования, который позволяет объекту изменять свое поведение в зависимости от его внутреннего состояния. Этот паттерн позволяет инкапсулировать состояние объекта и его поведение, что упрощает управление сложными состояниями и переходами между ними
Отличие паттерна "Состояние" от паттерна "Стратегия" заключается в том, что "Состояние" фокусируется на изменении поведения объекта в зависимости от его внутреннего состояния, тогда как "Стратегия" фокусируется на изменении алгоритма или поведения объекта в зависимости от внешних факторов.
Интерфейс и классы состояний
Основной класс - контекст
Пример использования



