package memento;/* * :以前的小霸王游戏是不是可以保存游戏进度? * :是的 * :那是怎么实现的呢? * :应该是... * :来 先简单实现一下   *  */public class Commonly {public static void main(String[] args) {GameRole gameRole = new GameRole();gameRole.GetInitState();gameRole.Display();//备份GameRole gameRole2 = new GameRole();gameRole2.setVit(gameRole.getVit());gameRole2.setAtk(gameRole.getAtk());gameRole2.setDef(gameRole.getDef());gameRole.Fight();gameRole.Display();//恢复状态gameRole.setVit(gameRole2.getVit());gameRole.setAtk(gameRole2.getAtk());gameRole.setDef(gameRole2.getDef());gameRole.Display();/* * 把属性给用户开放了 不是很好的选择   代码未错未必优 */}}class GameRole{//生命力private int vit;//***力private int atk;//防御力private int def;/* * 展示角色信息 */public void Display(){System.out.println("角色当前状态:");System.out.println("体力:"+vit);System.out.println("***力"+atk);System.out.println("防御力"+def);}/* * 获得初始状态 */public void GetInitState(){this.vit = 100;this.atk = 100;this.def = 100;}/* *战斗 */public void Fight(){this.vit = 0;this.atk = 0;this.def = 0;}public int getVit() {return vit;}public void setVit(int vit) {this.vit = vit;}public int getAtk() {return atk;}public void setAtk(int atk) {this.atk = atk;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}}
package memento;/* * 备忘录模式: *  在不破坏封装性的前提下,捕获一个对象的内部状态 *  并在该对象之外保存这个状态 这样以后就可以将该对象恢复到原有保存的状态 *   *   *  : *  发起人 *  备忘录 *  管理者 */public class Memento {public static void main(String[] args) {Role role = new Role();role.GetInitState();//展示信息role.Display();//备份RoleState roleState = role.RoleStateMemento();//战斗role.Fight();role.Display();//恢复role.RoleStateMemento(roleState);role.Display();/* * 很明显这里的三个属性没有给调用者开放  * 这样不管是备份还是恢复都很方便   */}}class Role{//生命力private int vit;//***力private int atk;//防御力private int def;/* * 保存游戏角色属性 */public RoleState RoleStateMemento(){return  new RoleState(vit,atk,def);}/* * 恢复游戏角色 */public void RoleStateMemento(RoleState roleState ){this.vit = roleState.getVit();this.atk = roleState.getAtk();this.def = roleState.getDef();}/* * 展示角色信息 */public void Display(){System.out.println("角色当前状态:");System.out.println("体力:"+vit);System.out.println("***力"+atk);System.out.println("防御力"+def);}/* * 获得初始状态 */public void GetInitState(){this.vit = 100;this.atk = 100;this.def = 100;}/* *战斗 */public void Fight(){this.vit = 0;this.atk = 0;this.def = 0;}public int getVit() {return vit;}public void setVit(int vit) {this.vit = vit;}public int getAtk() {return atk;}public void setAtk(int atk) {this.atk = atk;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}}/* * 角色状态类(专门存角色的各种属性) */class RoleState{public RoleState(int vit,int atk,int def){this.vit = vit;this.atk = atk;this.def = def;}//生命力private int vit;//***力private int atk;//防御力private int def;public int getVit() {return vit;}public void setVit(int vit) {this.vit = vit;}public int getAtk() {return atk;}public void setAtk(int atk) {this.atk = atk;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}}



©著作权归作者所有:来自51CTO博客作者木子的昼夜的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. vue与react的简单比较(全局状态管理)
  2. Deemon & CSRF漏洞自动挖掘工具分析
  3. MySQL主从之master_info_repository与sync_master_info
  4. Oracle kill session相关问题
  5. 让隐藏视窗的Dock成半透明状态
  6. linux-系统状态命令
  7. MySQL深入研究:用户管理
  8. Flink1.8.0重大更新-Flink中State的自动清除详解
  9. 昨天面试别人说他熟悉Flink,结果我问了他Flink是如何实现exactly-

随机推荐

  1. What is Android?
  2. android 中 系统日期时间的获取
  3. android圆形进度条ProgressBar颜色设置
  4. andriod item内checked的setOnClickListe
  5. Android 格式化内部存储
  6. android全屏设置代码
  7. Android Studio - Failed to find CMake
  8. android开机启动一个Service实例
  9. Android 获取SD卡路径和判断SD卡是否存在
  10. Android Notification RemoteViews