Стратегия, состояние, команда, цепочка обязанностей.
Краткое содержание
Стратегия, состояние, команда, цепочка обязанностей.
Стратегия (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
7 months ago 00:23:30 1
[S02E07] Проектирование генератора уникальных ИД в распределённых системах| BookClub DOTNET
7 months ago 00:58:38 1
Минимальный уровень python для первой работы
7 months ago 00:13:04 1
Как Я учил Data Science
7 months ago 00:45:30 3
Алексей Корюкин — Что нового в интерфейсе ОС Аврора 5: управление и паттерны взаимодействия
7 months ago 00:44:20 1
Раз архитектура — «as Code», почему бы её не покрыть тестами?! Руслан Сафин.
7 months ago 00:34:22 1
PYTHON )))))
7 months ago 00:48:36 1
Паттерны проектирования общения сказать, что ты думаешь, так, чтобы от тебя не разбежались/Д.Вьюнова
7 months ago 00:10:19 1
Паттерны проектирования - Введение в тему [RU, Android] / Мобильный разработчик
7 months ago 00:36:55 1
Пробное Middle C# собеседование (мок-интервью)
7 months ago 00:01:25 1
Шоурил 2021 | Студия Артемия Лебедева
8 months ago 00:47:42 5
[S02E06] Проектирование хранилища типа “ключ-значение“ | BookClub DOTNET
8 months ago 00:15:40 1
Что такое архитектура приложения. Паттерны MVC, MVP, MVVM.
8 months ago 00:27:05 1
Шаблоны Java. Декоратор (Decorator / Wrapper)
8 months ago 00:19:36 1
Шаблоны Java. Строитель (Builder)
8 months ago 00:08:18 1
Шаблоны Java. Прототип (Prototype)
8 months ago 00:39:38 1
Паттерны проектирования. Порождающие шаблоны.
8 months ago 01:11:31 1
Паттерны проектирования. Поведенческие шаблоны.
8 months ago 01:29:37 1
Паттерны проектирования. Вводное занятие.
8 months ago 00:53:28 1
Паттерны проектирования. Структурные шаблоны.
8 months ago 00:20:09 1
Топ популярных вопросов на техническом собеседовании | Java Junior Middle | Распространенные вопросы
8 months ago 00:04:05 3
рассказываю простыми словами о паттернах проектирования: Singletone, метод фабрики, наблюдатель
8 months ago 00:09:54 1
Пять полезных онлайн сервисов для веб-разработчика #5
8 months ago 00:31:34 1
Объекты в JavaScript. Основы для начинающих. Синтаксис, создание, изменение. Уроки JavaScript с нуля
8 months ago 00:06:32 1
C++. Паттерн проектирования программ “ Мост (Bridge)“.