Das Memento-Entwurfsmuster in Java verstehen
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:
- Urheber: Das Objekt, dessen interner Zustand gespeichert und wiederhergestellt werden muss.
- Memento: Ein Objekt, das den internen Zustand des Urhebers speichert. Das Andenken ist unveränderlich.
- 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 Erinnerungsstück kann dann vom Hausmeister aufbewahrt und bei Bedarf zur Wiederherstellung des Zustands des Urhebers verwendet werden.
Für und Wider
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-/Wiederherstellen-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 Zustand des Objekts groß ist.
- Zusätzliche Komplexität: Fügt zusätzliche Komplexität in den Code ein, 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<Editor.Memento> 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()); } }
Das obige ist der detaillierte Inhalt vonDas Memento-Entwurfsmuster in Java verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...

Wie erkennt die Redis -Caching -Lösung die Anforderungen der Produktranking -Liste? Während des Entwicklungsprozesses müssen wir uns häufig mit den Anforderungen der Ranglisten befassen, z. B. das Anzeigen eines ...
