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
原标题:【设计模式】18、备忘录模式
关键词:设计模式