← Back to home

Command

By Pscodium · 8/4/2026 · 2 views

Command

O Command transforma uma ação em um objeto.

Em vez de executar diretamente:

editor.copy();

podemos representar essa ação como:

new CopyCommand(editor);

Isso permite armazenar, executar, desfazer e até agendar comandos.


Exemplo

Criamos uma interface:

interface Command {
  execute(): void;
  undo(): void;
}

Nosso objeto real:

class Light {
  turnOn() {
    console.log(
      "Luz ligada"
    );
  }

  turnOff() {
    console.log(
      "Luz desligada"
    );
  }
}

Criamos os comandos:

class TurnOnCommand
  implements Command {

  constructor(
    private light: Light
  ) {}

  execute() {
    this.light.turnOn();
  }

  undo() {
    this.light.turnOff();
  }
}

Agora temos um Invoker:

class RemoteControl {

  constructor(
    private command: Command
  ) {}

  press() {
    this.command.execute();
  }

  undo() {
    this.command.undo();
  }
}

Uso:

const light =
  new Light();

const command =
  new TurnOnCommand(light);

const remote =
  new RemoteControl(command);

remote.press();

Resultado:

Luz ligada

Podemos desfazer:

remote.undo();

Resultado:

Luz desligada

Histórico de comandos

Uma grande vantagem é armazenar comandos.

class CommandHistory {

  private history: Command[] = [];

  execute(command: Command) {
    command.execute();

    this.history.push(command);
  }

  undo() {
    const command =
      this.history.pop();

    command?.undo();
  }
}

Agora podemos executar:

history.execute(
  new TurnOnCommand(light)
);

E depois:

history.undo();

Exemplo real: Editor de texto

Imagine um editor:

Ctrl + C
Ctrl + V
Ctrl + Z
Ctrl + Y

Cada ação pode ser representada por um Command:

CopyCommand
PasteCommand
DeleteCommand
UndoCommand

Isso permite criar:

Histórico
Undo/Redo
Macro
Agendamento
Logs de ações

Quando usar?

Command é útil quando precisamos:

  • Implementar Undo/Redo.
  • Criar filas de tarefas.
  • Agendar operações.
  • Registrar ações.
  • Criar macros.
  • Desacoplar quem solicita uma ação de quem a executa.

A ideia principal é:

Transformar uma ação em um objeto que pode ser armazenado, executado ou desfeito.



Comments

No comments yet.