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:
Implementierung
@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(); } }
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)); } }Dies ist ein vollständiges Beispiel für ein Memo-Muster. In diesem Beispiel erstellen wir eine Memo-Klasse Memento, die die Angriffskraft und Verteidigung des Charakters speichert Wir haben auch eine Charakterklasse erstellt, die den Status des Charakters speichern und wiederherstellen kann. Durch die Kombination dieser Klassen haben wir das Memo implementiert Modus. Zusammenfassung Vorteile
kann den Objektstatus speichern und wiederherstellen, wodurch Änderungen im Objektstatus flexibler und kontrollierbarer werden
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.
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!