设计模式18备忘录模式
Posted cutter_point
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式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 GameRole 10 { 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 RoleStateCaretaker 10 { 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 Memento 10 { 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_point 10 */ 11 public class Test 12 { 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 //大战boss 25 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备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章
[Python设计模式] 第18章 游戏角色备份——备忘录模式