Heim  >  Artikel  >  Java  >  Wie verwende ich das Java-Memo-Muster zum Speichern und Wiederherstellen des Objektstatus?

Wie verwende ich das Java-Memo-Muster zum Speichern und Wiederherstellen des Objektstatus?

PHPz
PHPznach vorne
2023-05-08 20:07:39924Durchsuche

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));
    }
}

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

Wie verwende ich das Java-Memo-Muster zum Speichern und Wiederherstellen des Objektstatus?

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen