командный режим — это шаблон поведенческого проектирования, который преобразует запрос в отдельный объект, содержащий всю информацию, связанную с запросом. Это преобразование позволяет параметризовать методы на основе различных запросов, задержек или запросов в очереди, а также реализовывать отменяемые операции.
Структура командного режима
отправитель (Sender) — также известный как «Invoker» — класс отвечает за инициализацию запроса, который должен содержать переменную-член для хранения ссылки на объект команды. Отправитель запускает команду, не отправляя запрос непосредственно получателю. Обратите внимание, что отправитель не несет ответственности за создание объекта команды: обычно он получает предварительно сгенерированную команду от клиента через конструктор.
Заказ(Командный) интерфейс обычно объявляет только метод выполнения команды.
Конкретные заказы (Конкретные команды) будут реализовывать различные типы запросов. Сама по себе конкретная команда не завершает работу, а делегирует вызов объекту бизнес-логики. Но для упрощения кода эти классы можно объединить. Параметры, необходимые для получения метода выполнения объекта, могут быть объявлены как переменные-члены определенных команд. Вы можете сделать объект команды неизменяемым и разрешить инициализацию этих переменных-членов только через конструктор.
получатель Класс (Получатель) содержит часть бизнес-логики. Приемником может служить практически любой объект. Большинство команд касаются только деталей того, как передать запрос получателю, а сам получатель выполнит всю работу.
клиент (Клиент) создаст и настроит определенные объекты команд. Клиент должен передать все параметры запроса, включая объект-получатель, конструктору команды. После этого сгенерированная команда может быть связана с одним или несколькими отправителями.