NBA之备忘录模式

230 阅读1分钟

Design Pattern:

Memento pattern is used to restore state of an object to a previous state 备忘录模式是用来存储以前的状态的

模式: Memento存储记录状态,Originator用来存储状态,Caretaker用来加载Memento中的状态

Memento作为state的一个对象 (就像一张便利贴写上你要记下来的东西)
public class Memento {
   private String state;

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

   public String getState(){
      return state;
   }	
}
Originator发起人 (就像是在用便利贴的用户)
public class Originator {

    private String state;

    public String getState() {
        return state;
    }

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

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

    public void getStateFromMemento(Memento memento){
        state = memento.getState();
    }
}
    
CareTaker管理类 (就像一个便利贴本本 存放了一大堆便利贴 取的时候报号码,存的时候往上面粘一张)
public class CareTaker {

    private List<Memento> mementoList = new ArrayList<>();

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

    public Memento get(int index){
        return mementoList.get(index);
    }
}

MementoPatternDemo实验开始
public class MementoPatternDemo {

    public static void main(String[] args) {
        //写进备忘录Memento
        //CareTaker 存储Memento
        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("第一次存放"+originator.getState());
        originator.getStateFromMemento(careTaker.get(1));
        System.out.println("第二次存放"+originator.getState());
        
    }
}
结果