


Wie verwende ich das Java-Memo-Muster zum Speichern und Wiederherstellen des Objektstatus?
Einführung
Memento-Muster ist ein Verhaltensentwurfsmuster, das es ermöglicht, den internen Zustand eines Objekts zu erfassen und zu speichern, ohne die Kapselung zu zerstören, und das Objekt kann später in seinen vorherigen Zustand zurückversetzt werden. Der Kern dieses Musters ist die Memento-Klasse. In Java kann das Memento-Muster durch die Definition einer Memento-Klasse implementiert werden. Die Memento-Klasse enthält normalerweise ein oder mehrere private Felder, um den erforderlichen internen Status des gespeicherten Objekts zu speichern Stellen Sie außerdem öffentliche Methoden zum Abrufen und Festlegen dieser Felder bereit. Das ursprüngliche Objekt kann die Memo-Klasse verwenden, um ein Memo zu erstellen und im Verlauf zu speichern Verwenden Sie das Memo, um seinen Status wiederherzustellen.
Im Memo-Modus sind im Allgemeinen die folgenden drei Rollen beteiligt:
- Originator (Initiator): Es ist das Objekt, dessen Status gespeichert werden soll. Es stellt eine Schnittstelle zum Erstellen von Memos bereit und Wiederherstellen von Memos, sodass andere Objekte ihren internen Status erhalten können kann verhindern, dass andere Objekte als der Urheber auf diesen Status zugreifen.
- Betreuer (Manager): Er ist dafür verantwortlich, das Memo bei Bedarf zur Wiederherstellung bereitzustellen .
- Bei der Implementierung des Memo-Modus in Java sind im Allgemeinen die oben genannten drei Rollen erforderlich, und der Hausmeister kann wählen, ob er entsprechend den tatsächlichen Anforderungen implementiert werden soll.
Implementierung
Angenommen, es gibt ein Spiel Die Charakterklasse Rolle hat drei Attribute: Angriff (Angriffskraft), Verteidigung (Verteidigungswert) und HP (Gesundheitswert). Jetzt möchten wir einen Memo-Modus implementieren, der den Status des Charakters speichern und bei Bedarf wiederherstellen kann Memo-Klasse
@Data public class Memento { /** * 攻击力 */ private int attack; /** * 防御力 */ private int defense; /** * 生命值 */ private int hp; public Memento(int attack, int defense, int hp) { this.attack = attack; this.defense = defense; this.hp = hp; } }
Einleitender Mensch
@Data public class Role { /** * 攻击力 */ private int attack; /** * 防御力 */ private int defense; /** * 生命值 */ private int hp; public Role(int attack, int defense, int hp) { this.attack = attack; this.defense = defense; this.hp = hp; } /** * 将当前对象储存值Memento中 * @return */ public Memento save(){ return new Memento(attack,defense,hp); } /** * 从memento中获取状态;并恢复到当前状态 * @param memento */ public void restore(Memento memento){ attack = memento.getAttack(); defense = memento.getDefense(); hp = memento.getHp(); } }
Manager-Klasse
public class Caretaker { private List<Memento> mementos = new ArrayList<>(); public void addMemento(Memento m){ mementos.add(m); } public Memento getMemento(int index){ return mementos.get(index); } }
Test
public class Demo { public static void main(String[] args) { Role role = new Role(100,50,20); Caretaker caretaker = new Caretaker(); Memento memento = role.save(); caretaker.addMemento(memento); // 攻击力+10 role.setAttack(role.getAttack()+10); System.out.println(JSON.toJSONString(role)); // 恢复 role.restore(caretaker.getMemento(0)); System.out.println(JSON.toJSONString(role)); } }
kann den Objektstatus speichern und wiederherstellen, wodurch Änderungen im Objektstatus flexibler und kontrollierbarer werden
Der Modus ist einfach zu implementieren, leicht zu verstehen und zu verwenden .
Das Memoobjekt ist vom Originalobjekt getrennt, wodurch die Kapselung des Systems sichergestellt wird.
Nachteile
-
Wenn die Menge der zu speichernden Statusdaten relativ groß ist, kann das Memoobjekt eine große Menge belegen Speicherplatz.
Wenn der Status häufig gespeichert werden muss, kann die Verwaltung von Memo-Objekten komplizierter werden kann später auf einen früheren Zustand zurückgesetzt werden, z. B. der Rückgängig-Vorgang in einem Texteditor.
Szenarien, in denen der Objektstatus gesichert und wiederhergestellt werden muss, z. B. die Transaktionsverwaltung in der Datenbank ist notwendig, um einen Snapshot des Objektstatus zu implementieren, während anschließende Analysen und Statistiken durchgeführt werden.
Kurz gesagt eignet sich der Java-Memo-Modus für Szenarien, in denen Objektstatus gespeichert werden müssen und wiederhergestellt werden. Es kann Entwicklern helfen, Änderungen in Objektzuständen besser zu verwalten und die Flexibilität und Kontrollierbarkeit des Systems zu verbessern
Das obige ist der detaillierte Inhalt vonWie verwende ich das Java-Memo-Muster zum Speichern und Wiederherstellen des Objektstatus?. 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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

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



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Spring Boot vereinfacht die Schaffung robuster, skalierbarer und produktionsbereiteter Java-Anwendungen, wodurch die Java-Entwicklung revolutioniert wird. Der Ansatz "Übereinkommen über Konfiguration", der dem Feder -Ökosystem inhärent ist, minimiert das manuelle Setup, Allo
