Entwurfsmuster - Erinnerungsmuster

Das Erinnerungsmuster wird verwendet, um den Status eines Objekts auf einen vorherigen Status zurückzusetzen. Das Erinnerungsmuster fällt unter die Kategorie Verhaltensmuster.

Implementierung

Das Erinnerungsmuster verwendet drei Schauspielerklassen. Memento enthält den Status eines wiederherzustellenden Objekts. Originator erstellt und speichert Status in Memento-Objekten, und das Caretaker-Objekt ist dafür verantwortlich, den Objektstatus von Memento wiederherzustellen. Wir haben die Klassen Memento , Originator und CareTaker erstellt .

MementoPatternDemo , unsere Demo-Klasse, verwendet CareTaker- und Originator- Objekte, um die Wiederherstellung von Objektzuständen anzuzeigen .

Schritt 1

Erstellen Sie eine Memento-Klasse.

Memento.java

public class Memento {
   private String state;

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

   public String getState(){
      return state;
   }	
}

Schritt 2

Erstellen Sie eine Originator-Klasse

Originator.java

public class Originator {
   private String state;

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

   public String getState(){
      return state;
   }

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

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

Schritt 3

Erstellen Sie die 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){
      return mementoList.get(index);
   }
}

Schritt 4

Verwenden Sie CareTaker- und Originator- Objekte.

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("First saved State: " + originator.getState());
      originator.getStateFromMemento(careTaker.get(1));
      System.out.println("Second saved State: " + originator.getState());
   }
}

Schritt 5

Überprüfen Sie die Ausgabe.

Current State: State #4
First saved State: State #2
Second saved State: State #3