Padrão Command
O padrão Command é usado em editores de texto, jogos e sistemas de transação para implementar desfazer/refazer. Em vez de chamar métodos diretamente, cada ação vira um objeto que sabe como executar e desfazer a si mesmo. Isso permite empilhar comandos em um histórico e reverter operações sem acoplar o editor a cada ação específica.
O PROBLEMA
Implemente Command pattern para editor de texto: Inserir, Deletar, Substituir com execute() e undo().
EXEMPLO
editor.executar(new Inserir("Olá"));
editor.executar(new Inserir(" Mundo"));
editor.texto → "Olá Mundo"
editor.desfazer();
editor.texto → "Olá"SOBRE O CONCEITO
O padrão Command encapsula uma operação como um objeto com métodos execute() e undo(). Cada comando deve salvar o estado anterior do editor (ex.: o texto antes de inserir) dentro do próprio comando, no construtor ou no execute(). Erro comum: fazer undo() sem ter guardado esse estado, o que impossibilita reverter. Outro erro: não manter um histórico – você precisa de um array (history) onde cada comando executado é adicionado via push(). Ao desfazer, pop() do histórico e chama undo() no comando. Use class e extends para os comandos concretos, e o editor deve ter um método executar() que chama execute() no comando e o empilha.
RESOLUÇÃO