Undo em um editor

Antes de uma alteração, o editor registra um snapshot. Ao desfazer, restaura aquele estado. O originador decide o que precisa ser capturado; um caretaker mantém a sequência e não interpreta o conteúdo.

Exemplo em C#

public sealed class EditorTexto
{
    private string _texto = "";
    public void Digitar(string texto) => _texto += texto;
    public Snapshot Salvar() => new(_texto);
    public void Restaurar(Snapshot snapshot) => _texto = snapshot.Texto;
    public sealed record Snapshot(string Texto);
}

A visibilidade do snapshot e sua estrutura devem ser limitadas pela linguagem e pelo design. Para estados grandes, snapshots completos podem custar muita memória; estratégias incrementais exigem mais cuidado.

Cuidados

Considere versionamento, retenção, dados sensíveis e a consistência de snapshots. Memento é local ao ciclo de vida do objeto, não um mecanismo automático de backup distribuído. Relacione com Command (que pode representar ações reversíveis) e padrões GoF.