13.备忘录模式
模式定义
备忘录模式(Memento Pattern)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式,备忘录模式属于行为型模式。
模式解决的问题
备忘录模式让用户回到之前的某个状态,就像“后悔药”一样,穿越时空回到过去的某个状态。
模式角色
- 发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
- 备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
- 管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。
一、备忘录角色
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Memento {private String state;
}
二、发起人角色
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Originator {private String state;public Memento saveStateToMemento(){return new Memento(state);}public void getStateFromMemento(Memento memento){state = memento.getState();}
}
三、管理者
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Storage {private List<Memento> mementos = new ArrayList<Memento>();
}
四、测试类
public class MementoTest {public static void main(String[] args) {Originator originator = new Originator();Storage storage = new Storage();originator.setState("状态:第1关");storage.getMementos().add(originator.saveStateToMemento());originator.setState("状态:第2关");storage.getMementos().add(originator.saveStateToMemento());originator.setState("状态:第3关");storage.getMementos().add(originator.saveStateToMemento());System.out.println("当前"+originator.getState());System.out.println("退回到第2关");originator.getStateFromMemento(storage.getMementos().get(1));System.out.println("当前"+originator.getState());}
}