Onde isso aparece?

Botões, filas de tarefas e histórico de edição precisam representar ações antes ou depois da execução. Um comando nomeado pode ser validado, registrado, agendado ou retentado.

Exemplo em C#

public interface ICommand
{
    Task ExecuteAsync(CancellationToken cancellationToken);
}
public sealed class EnviarRecibo(IEmailSender email, string destinatario) : ICommand
{
    public Task ExecuteAsync(CancellationToken cancellationToken) =>
        email.EnviarAsync(destinatario, "Seu recibo", cancellationToken);
}

A infraestrutura pode executar qualquer ICommand sem conhecer o detalhe do recibo. Para undo, o comando precisa guardar informação suficiente para compensar a operação — nem toda ação é reversível.

Trade-offs

Commands ajudam em filas e auditoria, mas acrescentam tipos e serialização precisa ser segura se comandos cruzarem processos. Não trate automaticamente um comando como transação distribuída. Compare com Chain of Responsibility e Saga, Outbox e Inbox; veja o índice GoF.