Стратегия, состояние, команда, цепочка обязанностей.
Краткое содержание
Стратегия, состояние, команда, цепочка обязанностей.
Стратегия (Strategy)
Паттерн Стратегия предлагает определить семейство схожих алгоритмов, которые часто изменяются или расширяются, и вынести их в собственные классы, называемые стратегиями.
Когда вспомнить о шаблоне Стратегия?
1. Когда вам нужно использовать разные вариации какого-то алгоритма внутри одного объекта.
2. Когда у вас есть множество похожих классов, отличающихся только некоторым поведением.
3. Когда вы не хотите обнажать детали реализации алгоритмов для других классов.
4. Когда различные вариации алгоритмов реализованы в виде развесистого условного оператора. Каждая ветка такого оператора представляет собой вариацию алгоритма.
Плюсы vs. Минусы
Плюсы:
1. Горячая замена алгоритмов на лету.
2. Изолирует код и данные алгоритмов от остальных классов.
3. Уход от наследования к делегированию.
4. Реализует принцип открытости/закрытости.
Минусы:
1. Усложняет программу за счёт дополнительных классов.
2. Клиент должен знать, в чём состоит разница между стратегиями, чтобы выбрать подходящую.
Состояние (State)
Состояние — объект меняет поведение в зависимости от своего состояния, создавая впечатление подмены класса объекта. При этом как правило существует четкий список переходов из одних состояний в другие.
Знакомо? Думаю, да.
Правильно! Это же конечный автомат (state machine).
Контекст не выполняет действия, он делегирует эти обязанности объектам-состояниям.
Когда вспомнить о шаблоне Состояние?
1. Когда имеется объект, поведение которого кардинально меняется в зависимости от внутреннего состояния, причём типов состояний много, и они часто меняются.
2. Когда код класса содержит множество больших, похожих друг на друга условных операторов, которые выбирают поведения в зависимости от текущих значений полей класса.
3. Когда используется табличная машина состояний, построенная на условных операторах и приводящая к дублированию кода для похожих состояний и переходов.
Плюсы vs. Минусы
Плюсы:
1. Избавляет от множества больших условных операторов машины состояний.
2. Концентрирует в одном месте код, связанный с определённым состоянием.
3. Упрощает код контекста.
Минусы:
1. Может неоправданно усложнить код, если состояний мало и они редко меняются.
Отличие от Стратегии
Состояние можно рассматривать как надстройку над Стратегией. Оба паттерна используют композицию, чтобы менять поведение основного объекта, делегируя работу вложенным объектам-помощникам. Однако в Стратегии эти объекты не знают друг о друге и никак не связаны. В Состоянии сами конкретные состояния могут переключать контекст.
Команда (Command)
Поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
Плюсы vs. Минусы
Плюсы:
1. Убирает прямую зависимость между объектами, вызывающими операции, и объектами, которые их непосредственно выполняют.
2. Позволяет реализовать простую отмену и повтор операций.
3. Позволяет реализовать отложенный запуск операций.
4. Позволяет собирать сложные команды из простых.
5. Реализует принцип открытости/закрытости.
Минусы:
1. Усложняет код программы из-за введения множества дополнительных классов.
Цепочка обязанностей (CoR – Chain of Responsibility).
Поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
Когда вспомнить о шаблоне CoR?
Когда программа должна обрабатывать разнообразные запросы несколькими способами, но заранее неизвестно, какие конкретно запросы будут приходить и какие обработчики для них понадобятся.
Когда важно, чтобы обработчики выполнялись один за другим в строгом порядке.
Когда набор объектов, способных обработать запрос, должен задаваться динамически.
Плюсы vs. Минусы
Плюсы:
1. Уменьшает зависимость между клиентом и обработчиками.
2. Реализует принцип единственной обязанности.
3. Реализует принцип открытости/закрытости.
Минусы:
1. Запрос может остаться никем не обработанным.
Закрепим
1. Стратегия предлагает определить семейство схожих алгоритмов, которые часто изменяются или расширяются, и вынести их в собственные классы, называемые стратегиями.
2. Состояние позволяет объектам менять поведение в зависимости от своего состояния. Извне создаётся впечатление, что изменился класс объекта.
3. Команда превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов.
4. Цепочка обязанностей позволяет передавать запросы последовательно по цепочке обработчиков.
1 view
1
2
11 months ago 00:06:20 1
C++. Паттерн проектирования программ “Декоратор (Decorator)“.
11 months ago 00:08:50 1
C++. Паттерн проектирования программ “Компоновщик (Composite)“.
11 months ago 00:06:32 1
C++. Паттерн проектирования программ “ Мост (Bridge)“.
11 months ago 00:07:50 1
C++. Паттерн проектирования программ “ Адаптер (Adapter)“. Реализация на уровне классов.
11 months ago 00:06:46 1
C++. Паттерн проектирования программ “ Адаптер (Adapter)“. Реализация на уровне объектов.
11 months ago 00:04:17 1
C++. Паттерн проектирования программ “Прототип (Prototype)“.
11 months ago 00:05:21 1
C++. Паттерн проектирования программ “Одиночка (Singleton)“.
11 months ago 00:11:15 1
C++. Паттерн проектирования программ “Строитель (Builder)“.
11 months ago 00:08:38 1
C++. Паттерн проектирования программ “Абстрактная фабрика (Abstract Factory)“.
11 months ago 00:05:33 1
C++. Паттерн проектирования программ “Фабричный метод (FactoryMethod)“.
11 months ago 00:58:38 1
Минимальный уровень python для первой работы
11 months ago 00:45:30 1
Алексей Корюкин — Что нового в интерфейсе ОС Аврора 5: управление и паттерны взаимодействия
11 months ago 00:39:31 1
Особенности проектирования под ОС Аврора // Марина Салова, МойОфис
11 months ago 00:39:04 1
Кто не станет Go Junior Разработчиком в 2023? КНИГИ ВАКАНСИИ СОВЕТЫ
11 months ago 00:32:46 1
Автоматизация тестирования на С#
12 months ago 00:34:22 2
ХОЧЕШЬ ВЫУЧИТЬ Python? Давай вместе :)
12 months ago 01:02:14 1
[SafeCode Live] Secure by design
12 months ago 00:23:11 1
Паттерны проектирования в Java с нуля ➤ Паттерн Factory Method
12 months ago 00:05:06 1
9 Паттерн проектирования State Состояние
12 months ago 00:24:14 1
Абстрактная фабрика. Паттерны проектирования — обмен простоты на гибкость?
12 months ago 02:28:48 1
Искусственный интеллект и нейронные сети C#. Машинное обучение для начинающих. Простая нейросеть.