你的位置:首页 > ASP.net教程

[ASP.net教程]【设计模式】18、备忘录模式


 

 

 1 package com.shejimoshi.behavioral.Memento; 2  3  4 /** 5  * 功能:游戏角色 6  * 时间:2016年3月6日下午9:39:18 7  * 作者:cutter_point 8 */ 9 public class GameRole10 {11   private int attackPower;  //攻击力12   private int blood;  //血量13   private int defense;  //防御力14   15   public void getInitState()16   {17     attackPower = 100;18     blood = 100;19     defense = 100;20   }21   22   public void display()23   {24     System.out.println("攻击力:" + attackPower + "\t生命力:" + blood + "\t防御力:" + defense);25   }26   27   //保存当前存储点28   public Memento saveState()29   {30     return new Memento(attackPower, blood, defense);31   }32   33   public void recoveryState(Memento memento)34   {35     this.attackPower = memento.getAttackPower();36     this.blood = memento.getBlood();37     this.defense = memento.getDefense();38   }39   40   public void fight()41   {42     this.attackPower -= 40;43     this.blood -= 40;44     this.defense -= 60;45   }46 }

 

 1 package com.shejimoshi.behavioral.Memento; 2  3  4 /** 5  * 功能:存储状态管理者 6  * 时间:2016年3月6日下午10:10:23 7  * 作者:cutter_point 8 */ 9 public class RoleStateCaretaker10 {11   private Memento memento;12 13   public Memento getMemento()14   {15     return memento;16   }17 18   public void setMemento(Memento memento)19   {20     this.memento = memento;21   }22   23 }

 

 1 package com.shejimoshi.behavioral.Memento; 2  3  4 /** 5  * 功能:游戏存储点,备忘录 6  * 时间:2016年3月6日下午9:46:03 7  * 作者:cutter_point 8 */ 9 public class Memento10 {11   private int attackPower;  //攻击力12   private int blood;  //血量13   private int defense;  //防御力14   15   public Memento(int attackPower, int blood, int defense)16   {17     this.attackPower = attackPower;18     this.blood = blood;19     this.defense = defense;20   }21 22   public int getAttackPower()23   {24     return attackPower;25   }26 27   public void setAttackPower(int attackPower)28   {29     this.attackPower = attackPower;30   }31 32   public int getBlood()33   {34     return blood;35   }36 37   public void setBlood(int blood)38   {39     this.blood = blood;40   }41 42   public int getDefense()43   {44     return defense;45   }46 47   public void setDefense(int defense)48   {49     this.defense = defense;50   }51   52 }

 

 1 package com.shejimoshi.behavioral.Memento; 2  3  4 /** 5  * 功能:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先的状态 6  * 适用:必须保存一个对象在某一个时刻的状态,这样以后需要时它才能恢复到先前的状态 7  *       如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象封装信 8  * 时间:2016年3月6日下午8:58:55 9  * 作者:cutter_point10 */11 public class Test12 {13   public static void main(String[] args)14   {15     //开启游戏,初始化状态16     GameRole gr = new GameRole();17     gr.getInitState();//初始化状态18     gr.display();19     20     //保存进度点21     RoleStateCaretaker rsc = new RoleStateCaretaker();22     rsc.setMemento(gr.saveState());23     24     //大战boss25     gr.fight();26     gr.display();27     28     //恢复状态29     gr.recoveryState(rsc.getMemento());30     gr.display();31     32   }33 }

 

攻击力:100	生命力:100	防御力:100攻击力:60	生命力:60	防御力:40攻击力:100	生命力:100	防御力:100