18.备忘录模式
来源:互联网 发布:win7人工智能 编辑:程序博客网 时间:2024/05/19 04:26
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;}}
阅读全文
0 0
- 18.备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 17.适配器模式
- code review
- (10) Shell 实战之Tomcat 重部署
- Web前端-HeadFirst-笔记-CH10-简写vs长形式
- Markdown-----基础语法
- 18.备忘录模式
- linux系统ubuntu环境下修改MySQL (V5.7.18)的密码
- 58 linux i2c设备驱动之eeprom驱动
- articles about network queue and linux sysctl parameters
- USB安装Ubuntu单系统,设置拼音输入法
- docker 使用centos 镜像 运行 javaweb ,并重新生成镜像
- include、include_once、require、require_once的区别
- 前端面试整理<特别多,耐心看基础面试题部分基本没有问题了!!!>
- Coin Change