Поведенческие паттерны проектирования
Список поведенческих паттернов проектирования, которые решают задачи эффективного и безопасного взаимодействия между объектами программы.
![Цепочка обязанностей](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
Позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
![Команда](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
Превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
![Итератор](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
Даёт возможность последовательно обходить элементы составных объектов, не раскрывая их внутреннего представления.
![Посредник](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
Позволяет уменьшить связанность множества классов между собой, благодаря перемещению этих связей в один класс-посредник.
![Снимок](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Позволяет сохранять и восстанавливать прошлые состояния объектов, не раскрывая подробностей их реализации.
![Наблюдатель](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
Создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.
![Состояние](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
Позволяет объектам менять поведение в зависимости от своего состояния. Извне создаётся впечатление, что изменился класс объекта.
![Стратегия](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
Определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы.
![Шаблонный метод](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
Определяет скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы. Паттерн позволяет подклассам переопределять шаги алгоритма, не меняя его общей структуры.
![Посетитель](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
Позволяет добавлять в программу новые операции, не изменяя классы объектов, над которыми эти операции могут выполняться.