Memento-Muster
Das Memento-Muster speichert einen bestimmten Zustand eines Objekts, damit das Objekt zu einem geeigneten Zeitpunkt wiederhergestellt werden kann. Das Memento-Muster ist ein Verhaltensmuster.
Das Memento-Muster ermöglicht das Erfassen und Wiederherstellen des internen Zustands eines Objekts, ohne die Kapselung zu verletzen.
Einführung
Absicht
Erfassen Sie den internen Zustand eines Objekts, ohne die Kapselung zu verletzen, und ermöglichen Sie, dass diese Zustände außerhalb des Objekts gespeichert und wiederhergestellt werden.
Wesentliche gelöste Probleme
- Ermöglichen Sie das Erfassen und Speichern des internen Zustands eines Objekts, sodass es in Zukunft in diesen Zustand wiederhergestellt werden kann, wodurch Rückgängig- und Rollback-Operationen ermöglicht werden.
Anwendungsfall
- Wenn die Notwendigkeit besteht, einen Rückgängig-Mechanismus bereitzustellen, der es Benutzern ermöglicht, zu vorherigen Zuständen zurückzukehren.
Implementierungsansatz
- Memento-Klasse erstellenDient zum Speichern und Kapseln des Zustands eines Objekts.
- Originator-Rolle erstellen: Verantwortlich für das Erstellen von Memento-Objekten und das Wiederherstellen des Zustands nach Bedarf.
- Eine Memento-Verwaltungsklasse erstellen(Optional): Verantwortlich für die Verwaltung aller Memento-Objekte.
Schlüsselcode
- MementoSpeichert die Zustandsinformationen des Originators.
- Originator: Memento-Objekte erstellen und den Zustand anhand des Mementos wiederherstellen.
Anwendungsbeispiel
- Mittel gegen ReueBietet eine Funktion für Rückgängig-Operationen.
- Spielstand speichern: Spielfortschritt speichern und Spielern ermöglichen, frühere Speicherstände zu laden.
- Strg+Z unter WindowsRückgängig-Operation implementieren.
- Zurück-Schaltfläche des IE-BrowsersErmöglicht Benutzern, zu einer vorherigen Seite zurückzukehren.
- Verwaltung von Datenbanktransaktionen: Zustand durch Transaktionsprotokolle speichern, um Rollback zu implementieren.
Vorteile
- Mechanismus zur Zustandswiederherstellung bereitstellen: Ermöglicht Benutzern, bequem zu historischen Zuständen zurückzukehren.
- Zustandsinformationen kapseln: Benutzer müssen sich nicht um die Details der Zustandsspeicherung kümmern.
Nachteile
- Ressourcenverbrauch: Wenn der Zustand des Objekts komplex ist, kann das Speichern des Zustands erhebliche Ressourcen verbrauchen.
Verwendungshinweise
- Verwenden Sie das Memento-Muster in Szenarien, in denen Datenzustände gespeichert und wiederhergestellt werden müssen.
- Erwägen Sie, das Prototype-Muster in Kombination mit dem Memento-Muster zu verwenden, um Speicher zu sparen.
Hinweise
- Um die Kopplung zu verringern, sollten Memento-Objekte indirekt über eine Memento-Verwaltungsklasse verwaltet werden.
- Das Memento-Muster sollte mit Vorsicht verwendet werden, um einen übermäßigen Verbrauch von Systemressourcen zu vermeiden.
Struktur
Das Memento-Muster umfasst die folgenden Hauptrollen:
Memento: Verantwortlich für das Speichern des internen Zustands des Originator-Objekts. Ein Memento kann einen Teil oder die gesamte Zustandsinformation des Originators speichern.
Originator: Erstellt ein Memento-Objekt und verwendet es, um den eigenen internen Zustand des Objekts wiederherzustellen. Der Originator erstellt normalerweise ein Memento-Objekt, wenn der Zustand gespeichert werden muss, und verwendet das Memento-Objekt, wenn der Zustand wiederhergestellt werden muss.
Caretaker: Verantwortlich für das Speichern von Memento-Objekten, aber er bearbeitet oder inspiziert sie nicht. Der Caretaker kann Mementos nur an andere Objekte weitergeben.
Implementierung
Das Memento-Muster verwendet drei KlassenMemento、OriginatorundCareTaker. Memento enthält den Zustand des wiederherzustellenden Objekts. Originator erstellt den Zustand und speichert ihn in einem Memento-Objekt. Das Caretaker-Objekt ist dafür verantwortlich, den Zustand des Objekts aus dem Memento wiederherzustellen.
MementoPatternDemo, unsere Demo-Klasse verwendetCareTakerundOriginatorObjekte, um die Wiederherstellung des Objektzustands zu zeigen.
Schritt 1
Memento-Klasse erstellen.
Memento.java
Schritt 2
Originator-Klasse erstellen.
Originator.java
Schritt 3
Erstelle die CareTaker-Klasse.
CareTaker.java
Schritt 4
VerwendungCareTakerundOriginatorObjekt.
MementoPatternDemo.java
Schritt 5
Ausgabe überprüfen.
Current State: State #4 First saved State: State #2 Second saved State: State #3Weitere Erweiterungen