-
Notifications
You must be signed in to change notification settings - Fork 3
Command
Инкапсулирует запрос как объект, позволяя тем самым задавать параметры клиентов для обработки соответствующих запросов, ставить запросы в очередь или протоколировать их, а также поддерживать отмену операций.
Используйте паттерн команда, когда хотите:
- Параметризовать объекты выполняемым действием, как в случае с пунктами меню.
- Определять, ставить в очередь и выполнять запросы в разное время.
- Поддержать отмену операций. Операция Execute объекта Command может сохранить состояние, необходимое для отката действий, выполненных командой.
- Поддержать протоколирование изменений, чтобы их можно было выполнить повторно после аварийной остановки системы.
- Структурировать систему на основе высокоуровневых операций, построенных из примитивных.
-
Command - команда: объявляет интерфейс для выполнения операции;
-
ConcreteCommand - конкретная команда: определяет связь между объектом-получателем Receiver и действием; реализует операцию Execute путем вызова соответствующих операций объекта Receiver;
-
Client - клиент: создает объект класса ConcreteCommand и устанавливает его получателя;
-
Invoker - инициатор: обращается к команде для выполнения запроса;
-
Receiver (Document, Application) - получатель: располагает информацией о способах выполнения операций, необходимых для удовлетворения запроса. В роли получателя может выступать любой класс.
Результаты применения паттерна команда таковы:
- Команда разрывает связь между объектом, инициирующим операцию, и объектом, имеющим информацию о том, как ее выполнить;
- Команды - это самые настоящие объекты. Допускается манипулировать ими и расширять их точно так же, как в случае с любыми другими объектами;
- Из простых команд можно собирать составные. В общем случае составные команды описываются паттерном компоновщик;
- Добавлять новые команды легко, поскольку никакие существующие классы изменять не нужно
