WHCSRL 技术网

设计模式(备忘录模式)

备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,属于行为模式。它是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。它包含以下几类角色:

1、Memento:备忘数据的bean;

2、Originator:发起者,需要备份数据的对象,其备份内容与Memento相同,负责创建一份备份数据,并能够通过备份数据回写状态;

3、Caretaker:保存该备份数据的独享,类似第三方存储;

代码如下:

  • Memento
  1. public class Memento {
  2. private int state;
  3. public Memento(int state){
  4. this.state = state;
  5. }
  6. public int getState() {
  7. return state;
  8. }
  9. public void setState(int state) {
  10. this.state = state;
  11. }
  12. }
  • Originator
  1. public class Originator {
  2. private int state;
  3. public Originator(){
  4. this.state = 0;
  5. }
  6. public Memento createMemento(){
  7. return new Memento(this.state);
  8. }
  9. public void setMemento(final Memento memento){
  10. this.state = memento.getState();
  11. }
  12. public int getState() {
  13. return state;
  14. }
  15. public void setState(int state) {
  16. this.state = state;
  17. }
  18. }
  • Caretaker
  1. public class Caretaker {
  2. private Memento memento;
  3. public Memento getMemento()
  4. {
  5. return memento;
  6. }
  7. public void setMemento(final Memento memento)
  8. {
  9. this.memento = memento;
  10. }
  11. }
  • APP 测试类
  1. public class App {
  2. public static void main(String[] args) {
  3. Originator ori = new Originator();
  4. Caretaker cv = new Caretaker();
  5. ori.setState(1);
  6. //将状态保存在Caretaker中
  7. cv.setMemento(ori.createMemento());
  8. System.out.println(ori.getState());
  9. ori.setState(2);
  10. //将Caretaker中的状态回写
  11. cv.setMemento(cv.getMemento());
  12. System.out.println(ori.getState());
  13. }
  14. }
推荐阅读