Memento Pattern

Pros

  • Allows previous state restoration of an object without compromising encapsulation

Cons

  • If the originator object uses a lot of memory then the memento states will increase the problem

Example Explanation

import java.util.List;
import java.util.ArrayList;

class Main {
  public static void main(String[] args) {
    Originator org = new Originator("first");
    CareTaker care = new CareTaker();
    System.out.println(org.getState());//first
    care.saveMemento(org.createMemento());

    org.setState("second");
    care.saveMemento(org.createMemento());
    System.out.println(org.getState());//second

    org.setState("third");
    care.saveMemento(org.createMemento());
    System.out.println(org.getState());//third

    org.setState("fourth");
    System.out.println(org.getState());//fourth
    org.setMemento( care.getMemento(0) );
    System.out.println(org.getState());//first

    org.setMemento( care.getLastSavedMemento() );
    System.out.println(org.getState());//third
  }
}
class Memento{
  private String state;
  public Memento(String state){
    this.state = state;
  }
  public String getState(){ return state; }
  public void setState(){ this.state = state; }
}
class Originator{
  private String state;

  public Originator(String startingState){
    this.state = startingState;
  }

  public Memento createMemento(){
    return new Memento(state);
  }
  public void setMemento(Memento memento){
    this.state = memento.getState();
  }
  public void setState(String newState){
    this.state = newState;
  }
  public String getState(){ return state; }
}
class CareTaker{
  List<Memento> list = new ArrayList<Memento>();

  public void saveMemento(Memento memento){
    list.add(memento);
  }
  public Memento getMemento(int index){
    return list.get(index);
  }
  public Memento getLastSavedMemento(){
    if(list.size() > 0) return list.get(list.size()-1); 
    return null;
  }
}

Extra Resources

https://www.geeksforgeeks.org/memento-design-pattern/

results matching ""

    No results matching ""