„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Das Memento-Entwurfsmuster in Java verstehen

Das Memento-Entwurfsmuster in Java verstehen

Veröffentlicht am 07.08.2024
Durchsuche:816

Understanding the Memento Design Pattern in Java

Problem

Das Memento-Muster befasst sich mit der Notwendigkeit, den internen Zustand eines Objekts zu erfassen und wiederherzustellen, ohne seine Kapselung zu verletzen. Dies ist in Szenarien nützlich, in denen Sie die Funktion „Rückgängig/Wiederherstellen“ implementieren möchten, sodass ein Objekt in einen vorherigen Zustand zurückkehren kann.

Lösung

Das Memento-Muster umfasst drei Hauptkomponenten:

  1. Urheber: Das Objekt, dessen interner Zustand gespeichert und wiederhergestellt werden muss.
  2. Memento: Ein Objekt, das den internen Status des Urhebers speichert. Das Andenken ist unveränderlich.
  3. Betreuer: Verantwortlich für die Aufforderung an den Urheber, seinen Zustand aus einem Andenken zu speichern oder wiederherzustellen.

Der Urheber erstellt ein Erinnerungsstück, das eine Momentaufnahme seines aktuellen Zustands enthält. Dieses Andenken kann dann vom Hausmeister aufbewahrt und bei Bedarf zur Wiederherstellung des Zustands des Urhebers verwendet werden.

Vor-und Nachteile

Vorteile

  • Behält die Kapselung bei: Ermöglicht das Speichern und Wiederherstellen des internen Status eines Objekts, ohne seine Implementierungsdetails offenzulegen.
  • Einfaches Rückgängigmachen/Wiederholen: Erleichtert die Implementierung der Rückgängig-/Wiederholen-Funktionalität und macht das System robuster und benutzerfreundlicher.
  • Zustandsverlauf: Ermöglicht die Verwaltung eines Verlaufs früherer Zustände des Objekts und ermöglicht so die Navigation zwischen verschiedenen Zuständen.

Nachteile

  • Speicherverbrauch: Das Speichern mehrerer Erinnerungsstücke kann erheblichen Speicher verbrauchen, insbesondere wenn der Status des Objekts groß ist.
  • Zusätzliche Komplexität: Fügt dem Code zusätzliche Komplexität hinzu, mit der Notwendigkeit, die Erstellung und Wiederherstellung von Erinnerungsstücken zu verwalten.
  • Verantwortung des Hausmeisters: Der Hausmeister muss Erinnerungsstücke effizient verwalten, was die Verantwortung und Komplexität des Systems erhöhen kann.

Beispiel einer realen Anwendung

Ein praktisches Beispiel für das Memento-Muster sind Texteditoren, die die Funktion „Rückgängig/Wiederherstellen“ bieten. Jede Änderung am Dokument kann als Erinnerung gespeichert werden, sodass der Benutzer bei Bedarf zu früheren Zuständen des Dokuments zurückkehren kann.

Beispielcode in Java

Memento-Muster im Code:

// Originator
public class Editor {
    private String content;

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public Memento save() {
        return new Memento(content);
    }

    public void restore(Memento memento) {
        content = memento.getContent();
    }

    // Memento
    public static class Memento {
        private final String content;

        public Memento(String content) {
            this.content = content;
        }

        private String getContent() {
            return content;
        }
    }
}

// Caretaker
public class History {
    private final Stack history = new Stack();

    public void save(Editor editor) {
        history.push(editor.save());
    }

    public void undo(Editor editor) {
        if (!history.isEmpty()) {
            editor.restore(history.pop());
        }
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        Editor editor = new Editor();
        History history = new History();

        editor.setContent("Version 1");
        history.save(editor);
        System.out.println(editor.getContent());

        editor.setContent("Version 2");
        history.save(editor);
        System.out.println(editor.getContent());

        editor.setContent("Version 3");
        System.out.println(editor.getContent());

        history.undo(editor);
        System.out.println(editor.getContent());

        history.undo(editor);
        System.out.println(editor.getContent());
    }
}
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/diegosilva13/understanding-the-memento-design-pattern-in-java-2c72?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3