content: // Classe que guarda o estado (Memento)
  class TextoMemento {
      private final String estado;
  
      public TextoMemento(String estado) {
          this.estado = estado;
      }
  
      public String getEstado() {
          return estado;
      }
  }
  
  // Originador: cria e restaura Mementos
  class EditorTexto {
      private String texto = "";
  
      public void escrever(String novoTexto) {
          texto += novoTexto;
      }
  
      public String getTexto() {
          return texto;
      }
  
      public TextoMemento salvar() {
          return new TextoMemento(texto); // salva estado atual
      }
  
      public void restaurar(TextoMemento memento) {
          texto = memento.getEstado(); // restaura estado anterior
      }
  }
  
  // Zelador: guarda os mementos
  class Historico {
      private List<TextoMemento> historico = new ArrayList<>();
  
      public void adicionarMemento(TextoMemento memento) {
          historico.add(memento);
      }
  
      public TextoMemento getMemento(int index) {
          return historico.get(index);
      }
  }
  
  // Teste do padrão Memento
  public class Main {
      public static void main(String[] args) {
          EditorTexto editor = new EditorTexto();
          Historico historico = new Historico();
  
          editor.escrever("Olá, ");
          historico.adicionarMemento(editor.salvar());
  
          editor.escrever("mundo!");
          historico.adicionarMemento(editor.salvar());
  
          System.out.println("Texto atual: " + editor.getTexto());
  
          editor.restaurar(historico.getMemento(0));
          System.out.println("Texto restaurado: " + editor.getTexto());
      }
  }
  