Java设计模式应用——备忘录模式
备忘录模式主要用于存档。游戏中我们打boss前总会存档,如果打boss失败,则读取存档,重新挑战boss。
可以看出来,备忘录模式一般包括如下数据结构
1、 存档文件:用于恢复备份场景的必要数据;
2、 存档管理器:用于管理存档,包括存档的读写与展示;
3、 被存档的对象。
下面以射击游戏的存档来举例:
1、 射击选手
package com.coshaho.learn.memorandum; // 射击手
public class Shooter
{
// 血量
private int blood = 100; // 子弹数量
private int bullet = 100; // 射击
public void shoot()
{
bullet = bullet - (int) (Math.random()*30);
if(0 > bullet)
{
bullet = 0;
}
bossHurt();
} // boss伤害
private void bossHurt()
{
blood = blood - (int) (Math.random()*25);
if(0 > blood)
{
blood = 0;
}
} public void show()
{
System.out.println("Shooter blood is " + blood + ", bullet is " + bullet + '.');
} // 保存
public Memorandum save()
{
return new Memorandum(blood, bullet);
} // 载入
public void recovery(Memorandum memory)
{
if(null == memory)
{
return;
}
blood = memory.getBlood();
bullet = memory.getBullet();
}
}
2、 存档文件
package com.coshaho.learn.memorandum; // 存档
public class Memorandum
{
private int blood; private int bullet; public Memorandum(int blood, int bullet)
{
this.blood = blood;
this.bullet = bullet;
} public int getBlood()
{
return blood;
} public int getBullet()
{
return bullet;
}
}
3、 存档管理器
package com.coshaho.learn.memorandum; // 存档管理器
public class MemorandumManager
{
private Memorandum memory; public Memorandum getMemory()
{
return memory;
} public void setMemory(Memorandum memory)
{
this.memory = memory;
}
}
4、 测试代码
package com.coshaho.learn.memorandum; public class MemorandumTest
{
public static void main(String[] args)
{
MemorandumManager mmemoryManager = new MemorandumManager();
Shooter shooter = new Shooter();
shooter.shoot();
shooter.show();
mmemoryManager.setMemory(shooter.save()); shooter.shoot();
shooter.show();
shooter.recovery(mmemoryManager.getMemory()); shooter.show();
}
}
Java设计模式应用——备忘录模式的更多相关文章
- 折腾Java设计模式之备忘录模式
原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...
- java设计模式之备忘录模式
备忘录模式 备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.一听到备忘录这个字的时候想起了小小时打的游 ...
- java设计模式9.备忘录模式、访问者模式、调停者模式
备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对 ...
- 19.java设计模式之备忘录模式
基本需求 游戏的角色有攻击力和防御力,在大战Boss之前保存自身的状态(攻击力和防御力),当大战Boss之后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 传统方案 一个对象,就对应一个保存对象状 ...
- 观世音甘泉活树的故事竟然是Java设计模式:备忘录模式
目录 定义 意图 主要解决问题 何时使用 优缺点 结构 白箱实现 黑箱实现 多重检查点 观世音甘泉活树的故事 定义 备忘录模式是对象的行为型模式,备忘录对象是一个用来存储另外一个对象内部状态的快照的对 ...
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
随机推荐
- 如何使QLineEdit禁止编辑
在写程序的时候喜欢使用QLineEdit,用来显示打开文件的路径.但是很不喜欢被编辑.那么要怎么设置不可编辑呢. (1)调用lineEdit->setEnabled(False) #不可编辑了 ...
- 这个代码给所有带有name属性的链接加了一个背景色
jQuery起点教程之使用选择器和事件jQuery提供两种方式来选择html的elements: 第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器(如:$(&quo ...
- SHU 414 - 字符串进制转换
题目链接:http://acmoj.shu.edu.cn/problem/414/ 很咸鱼的网上拉了个进制转换模板过来,因为数组开的太小一直WA,后来一气之下MAXN开到1e5,真是蓝瘦…… 后来实在 ...
- @log的decorator完美实现(原创)
# -*- coding: utf-8 -*- from functools import wraps from inspect import isfunction def beforecalled( ...
- Oracle体系结构之oracle密码文件管理
密码文件 密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [or ...
- zookeeper源码导入
1 搭建步骤 1.1 到github中下载该项目 项目地址 https://github.com/apache/zookeeper.下载.zip包到本地解压. 解压后文件目录: 1.2 使用ant对源 ...
- 借用HTML5 插入视频。音频
HTML5 规定了一种通过 video 元素来包含视频的标准方法. 插入视频 <video width="320" height="240" contro ...
- OC导航栏跳转指定界面
方法一: [self.navigationController popToViewController:[self.navigationController.viewControllers objec ...
- Tensorflow(一)
一.安装Ubantu环境 下载ios 网址:http://cn.ubuntu.com/download/ 2.配合虚拟机进行安装环境 虚拟机直接百度下载即可 虚拟机采用 3.配置 4.安装中 5.安装 ...
- 【Cocos2dx 3.3 Lua】触屏事件
cocos2dx 3.x触屏时间分为单点触摸和多点触摸: 单点触摸:(即只有注册的Layer才能接收触摸事件) 多点触摸点单用法(多个Layer获取屏幕事件): ...