Pola Desain - Pola Memento

Pola Memento digunakan untuk mengembalikan keadaan suatu objek ke keadaan sebelumnya. Pola Memento termasuk dalam kategori pola perilaku.

Penerapan

Pola Memento menggunakan tiga kelas aktor. Memento berisi keadaan suatu objek yang akan dipulihkan. Originator membuat dan menyimpan status di objek Memento dan objek Caretaker bertanggung jawab untuk memulihkan status objek dari Memento. Kami telah membuat kelas Memento , Originator dan CareTaker .

MementoPatternDemo , kelas demo kami, akan menggunakan objek CareTaker dan Originator untuk menunjukkan pemulihan status objek.

Langkah 1

Buat kelas Memento.

Memento.java

public class Memento {
   private String state;

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

   public String getState(){
      return state;
   }	
}

Langkah 2

Buat kelas Originator

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

LANGKAH 3

Buat kelas CareTaker

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

LANGKAH 4

Gunakan objek CareTaker dan Originator .

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

LANGKAH 5

Verifikasi hasilnya.

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