设计模式之备忘录模式

xiaoxiao2021-02-28  126

概述:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态

角色:

Memento 备忘录存储原发器对象的内部状态Originator 原发器创建一个备忘录,用以记录当前时刻它的内部状态。 使用备忘录恢复内部状态Caretaker 负责保存好备忘录。 不能对备忘录的内容进行操作或检查

类图:

实现:

public class Originator { private String state; public Originator(String state) { this.state = state; } //保存 public Memento createMemento() { return new Memento(state); } //返回 public void history(Memento memento) { state = memento.getState(); } public String getState() { return state; } public void setState(String state) { this.state = state; } @Override public String toString() { System.out.println("Originator{" + "state='" + state + '\'' + '}'); return "Originator{" + "state='" + state + '\'' + '}'; } } public class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } public void setState(String state) { this.state = state; } } public class Caretaker { private ArrayList<Memento> mementoList ; public Memento getMemento(int i){ if(null!=mementoList){ return mementoList.get(i); } return null; } public void setMemento(Memento memento){ if(null == mementoList){ mementoList = new ArrayList<>(); } mementoList.add(memento); } } public class testMemento { //步数标志 private static int index = 0; public static void main(String[] args) { Caretaker caretaker = new Caretaker(); Originator originator = new Originator("1"); originator.toString(); caretaker.setMemento(originator.createMemento()); //每次备份,index+1 index++; originator.setState("2"); originator.toString(); caretaker.setMemento(originator.createMemento()); index++; originator.setState("3"); originator.toString(); originator.history(caretaker.getMemento(index-1)); //每次撤销,index-1 index--; originator.toString(); originator.history(caretaker.getMemento(index-1)); index--; originator.toString(); } }

打印: Originator{state=’1’} Originator{state=’2’} Originator{state=’3’} Originator{state=’2’} Originator{state=’1’}

转载请注明原文地址: https://www.6miu.com/read-30412.html

最新回复(0)