Sobes.tech
Middle+
82
questionbank

Используешь ли ты паттерн Command в своей работе?

Ответ от нейросети

sobes.tech AI

Да, я использую паттерн Command.

Он полезнен для:

  • Инкапсуляции запроса как объекта, позволяя передавать его как параметр, ставить в очередь или логировать действия.
  • Поддержания отмены и повтора операций.
  • Организации обработки запросов в графических пользовательских интерфейсах, транзакциях и системах журналирования.

Простая реализация:

// Интерфейс команды
interface Command {
    void execute();
}

// Конкретная команда
class LightOnCommand implements Command {
    private Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.on();
    }
}

// Исполнитель (Receiver)
class Light {
    public void on() {
        System.out.println("Light is ON");
    }

    public void off() {
        System.out.println("Light is OFF");
    }
}

// Вызывающий (Invoker)
class RemoteControl {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void pressButton() {
        command.execute();
    }
}

// Клиент
class Client {
    public static void main(String[] args) {
        Light light = new Light();
        Command lightOn = new LightOnCommand(light);
        RemoteControl remote = new RemoteControl();
        remote.setCommand(lightOn);
        remote.pressButton(); // Light is ON
    }
}

Реальный пример из моего опыта:

В проекте по управлению заказами я использовал Command для реализации функций "Отменить заказ" и "Переоформить заказ". Каждая операция инкапсулировалась в отдельный объект команды, который можно было легко поставить в очередь для асинхронной обработки или сохранить для последующей отмены.