Latest web development tutorials

Memento Pattern

Memo-Modus (Memento Pattern) einen Zustand eines Objekts zu speichern, um das Objekt zu gegebener Zeit wieder herzustellen. Memorandum Muster gehören Verhaltensmuster.

Einführung

Vorsatz: Ohne Verletzung Verkapselung von den internen Zustand eines Objekts erfassen, und außerhalb des Objekts , den Zustand zu speichern.

Vor allem zu lösen: das Modell ist das sogenannte Memorandum ohne das Paket zu zerstören, internen Zustand eines Objekts zu erfassen, und den Zustand außerhalb des Objekts zu speichern , so dass das Objekt später zu einem zuvor gespeicherten Zustand wieder hergestellt werden kann.

Wann verwendet man :viele Male wir immer den internen Zustand eines Objekts aufnehmen müssen, ist der Zweck , dies zu tun ist , damit die Benutzer unsicher oder falsche Operation abzubrechen, kann zu seinem ursprünglichen Zustand wiederhergestellt werden , so dass er "Bedauern" zu essen hat.

Wie zu beheben: ein Memo nach Klasse entwickelt , um die Objektzustand zu speichern.

Key - Code:Kunden koppeln nicht mit Memo - Klasse, gepaart mit der Memo - Management - Klasse.

Anwendungsbeispiele: 1, es später bereuen.2, wenn das Spiel Archiv zu spielen. 3, Windows-Lane CTRI + z. 4, dh in der Rückseite. 4, die Transaktions-Management-Datenbank.

Vorteile: 1, um den Benutzern eine Möglichkeit , den Zustand des Mechanismus zur Wiederherstellung , die Benutzer bequemer zu sein , ermöglicht es zu einer Geschichte des Staates zurückzukehren.2, ein Paket von Informationen zu erzielen, so dass der Benutzer besorgt über den Zustand der Erhaltung der Details werden nicht benötigt.

Nachteile: verbrauchen Ressourcen.Wenn die Membervariablen der Klasse zu, ist verpflichtet, eine relativ große Ressourcen in Anspruch nehmen, und jedes Mal, wenn Sie eine bestimmte Menge an Speicher sparen verbrauchen.

Einsatzszenarien: 1, die Notwendigkeit zum Speichern / Wiederherstellen der relevanten Zustand der Szenendaten.2 ist eine Rollback-Operation zur Verfügung gestellt.

Anmerkung: 1, um die Grundsätze der Demeter gerecht zu werden, auch eine Klasse - Management - Memo.2, um Speicherplatz zu sparen, können Sie den Prototyp-Modell + Memo-Modus verwenden.

Realisierung

Memo - Modus verwendet drei KlassenMemento,Originator undHausmeister.Memento das Objekt enthält, in dem Zustand wiederhergestellt werden. Originator Memento-Objekt wird erstellt und in dem Zustand gespeichert. Caretaker Objekt ist verantwortlich für die Objekte aus Memento Zustand wiederherzustellen.

MementoPatternDemo,unsere Demonstration KlassenCareTakerundOriginatorObjekt mit dem Zustand des Objekts Recovery angezeigt werden soll .

Memorandum Muster UML-Diagramm

Schritt 1

Erstellen Sie ein Memento-Klasse.

Memento.java

public class Memento {
   private String Zustand;

   public Memento (String state) {
      this.state = Zustand;
   }

   public String getState () {
      Rückkehr Zustand;
   }	
}

Schritt 2

Erstellen Sie Originator Klasse.

Originator.java

public class Originator {
   private String Zustand;

   public void setState (String state) {
      this.state = Zustand;
   }

   public String getState () {
      Rückkehr Zustand;
   }

   public Memento saveStateToMemento () {
      return new Memento (state);
   }

   public void getStateFromMemento (Memento Memento) {
      state = Memento.getState ();
   }
}

Schritt 3

Erstellen Sie CareTaker Klasse.

CareTaker.java

Import java.util.ArrayList;
Import java.util.List;

public class CareTaker {
   private List <Memento> mementoList = new Arraylist <Memento> ();

   public void add (Memento state) {
      mementoList.add (state);
   }

   public Memento get (int index) {
      Rückkehr mementoList.get (Index);
   }
}

Schritt 4

Verwenden SieCareTakerundOriginatorObjekte.

MementoPatternDemo.java

public class MementoPatternDemo {
   public static void main (String [] args) {
      Originator Originator = new Originator ();
      CareTaker Caretaker = new CareTaker ();
      originator.setState ( "State # 1");
      originator.setState ( "State # 2");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "State # 3");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "State # 4");

      System.out.println ( "Current State:" + originator.getState ());		
      originator.getStateFromMemento (careTaker.get (0));
      System.out.println ( "State Erste gerettet:" + originator.getState ());
      originator.getStateFromMemento (careTaker.get (1));
      System.out.println ( "State Second gespeichert:" + originator.getState ());
   }
}

Schritt 5

Stellen Sie sicher, ausgegeben.

Aktueller Stand: State # 4
Erste gespeicherten Zustand: Zustand # 2
Zweitens gespeicherten Zustand: Zustand # 3