Поведенческий паттерн проектирования, который превращает запрос в отдельный объект, содержащий всю информацию о запросе. Это позволяет параметризовать методы объектов с различными запросами, ставить запросы в очередь или протоколировать их, а также поддерживает отмену операций.
Основные элементы паттерна:
- Команда (Command): Абстрактный класс или интерфейс, объявляющий метод для выполнения запроса.
python
- Конкретная Команда (Concrete Command): Реализует интерфейс
Command и связывает приемник с действием. Определяет набор действий, которые должны быть выполнены на приемнике.
python
- Приемник (Receiver): Класс, который знает, как выполнить фактическую работу. В нашем примере это
Light.
python
- Инициатор (Invoker): Объект, который запрашивает у команды выполнение действия. Не знает о конкретной команде или приемнике.
python
- Клиент (Client): Создает объекты
Concrete Command и связывает их с Receiver. Затем передает команду в Invoker.
python
Преимущества:
- Разделяет инициатор и приемник команды.
- Позволяет параметризовать инициатор различными командами.
- Облегчает реализацию отмены/повтора операций (путем сохранения истории команд).
- Позволяет построить очереди команд и протоколировать их выполнение.
Недостатки:
- Может привести к большому количеству классов, если много команд.