备忘录模式 
定义 
Without violating encapsulation,capture and externalize an object’s internal state so that the object can be restored to this state later. 
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
 
代码实现 
准备 
我们可以用备忘录模式来模拟游戏,游戏开始之后就开始备份游戏开始状态,当游戏失败,游戏结束,我们需要会到游戏开始就需要游戏开始的备份。
备份 
备忘录管理员 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package  org.example.memento;public  class  Caretaker   {    private  Memento memento ;     public  Memento getMemento ()  {         return  this .memento ;     }     public  void  setMemento (Memento memento)  {         this .memento = memento ;     } } 
 
备忘录 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package  org.example.memento;public  class  Memento   {    private  String state = "" ;          public  Memento (String state)  {         this .state = state ;     }     public  String getState ()  {         return  this .state ;     }     public  void  setState (String state)  {         this .state = state ;     } } 
 
游戏 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 package  org.example.memento;public  class  Game   {         private  String state = ""  ;          public  void  changeState ()  {         this .state = "游戏结束" ;     }          public  String getState ()  {         return  this .state ;     }          public  void  setState (String state)  {         this .state = state ;     }          public  Memento createMemento ()  {         return  new  Memento(this .state);     }          public  void  restoreMemento (Memento memento)  {         this .setState(memento.getState());     } } 
 
场景实现 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public  class  App   {         public  static  void  main (String[] args)   {                  Game game = new  Game();                  game.setState("游戏开始" );         System.out.println("=======游戏开始状态=======" );         System.out.println(game.getState());                  Caretaker caretaker = new  Caretaker();         caretaker.setMemento(game.createMemento());                  game.changeState();         System.out.println("=======游戏失败状态=======" );         System.out.println(game.getState());                  game.restoreMemento(caretaker.getMemento());         System.out.println("=======游戏恢复状态=======" );         System.out.println(game.getState());     } } 
 
备忘录的扩展 
应用实现 
需要保存和恢复数据的相关场景。 
提供回滚操作,包括文本回退等。 
需要监控的副本场景中,这个需要监控的场景不复杂,可以直接备份。 
数据库连接的事务管理就是使用备忘录模式。 
 
注意事项 
备忘录的生命周期。备忘录创建后就要在最近就使用,不能拖的太长。 
备忘录的性能。不要频繁的使用备忘录。每次创建一个备份都要消耗资源。