备忘录模式主要用于存档。游戏中我们打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设计模式应用——备忘录模式的更多相关文章

  1. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...

  2. java设计模式之备忘录模式

    备忘录模式 备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.一听到备忘录这个字的时候想起了小小时打的游 ...

  3. java设计模式9.备忘录模式、访问者模式、调停者模式

    备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对 ...

  4. 19.java设计模式之备忘录模式

    基本需求 游戏的角色有攻击力和防御力,在大战Boss之前保存自身的状态(攻击力和防御力),当大战Boss之后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 传统方案 一个对象,就对应一个保存对象状 ...

  5. 观世音甘泉活树的故事竟然是Java设计模式:备忘录模式

    目录 定义 意图 主要解决问题 何时使用 优缺点 结构 白箱实现 黑箱实现 多重检查点 观世音甘泉活树的故事 定义 备忘录模式是对象的行为型模式,备忘录对象是一个用来存储另外一个对象内部状态的快照的对 ...

  6. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  7. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  8. 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)

    原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...

  9. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

随机推荐

  1. SVG学习笔录(二)

    一.svg动画SMIL SVG采用的是使用文本来定义图形,这种文档结构非常适合于创建动画.要改变图形的位置.大小和颜色,只需要调整相应的属性就可以了.事实上,SVG有为各种事件处理而专门设计的属性,甚 ...

  2. Elasticsearch 与 Mongodb 数据同步问题

    1.mongo-connector工具 首先安装python环境 wget http://www.python.org/ftp/python/3.0.1/Python-3.0.1.tgz tar -z ...

  3. 纯CSS绘制的三角形箭头图案【原创】

    参考:http://www.webhek.com/css-triangles/ 使用上下左右的三角形箭头标志,直接用css即可完成,直接附上代码. css: div#up { width: 0px; ...

  4. URL长度过长的问题

    最近项目中很多跨域的问题,有时候跨域要传递很多参数,甚至有时候要传递整个对象,处理的方法是把对象转换成JSON形式的字符串再传递.此时该JSON字符串就比较长,作为参数附加到URL后面,URL就会变得 ...

  5. 【作业】 iterator,set_union 一些奇怪的语法

    关于set_union系列函数(需要有序)的第五个参数,output iterator. 网上都是用inserter(c,c.begin()) 但vs会编译报错 所以改成了back_inserter, ...

  6. Python:lambda表达式(匿名函数)

    lambda表达式: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中 ...

  7. VS 2005 处理条件

    1. VS 设置断点; 2.VS 查找需要跟踪的内存地址,如果是指针,需要取指针存放地的地址; 3. 4.继续运行,直到内存内容被改写.

  8. Highways---poj1751最小生成树

    http://poj.org/problem?id=1751 题意:有n个点,已知各点坐标,距离为权值,求最小生成树的边 但是这个最小生成树的m条边是已经确定的了,所以可以让已知边的权值为0: 在Pr ...

  9. 洛谷P3826 蔬菜 [NOI2017] 贪心

    正解:贪心 解题报告: umm,,,其实我还不会 废话我这么菜怎么可能懂QAQ 先占坑,想学习这题很久了呢QAQ

  10. 字符编码笔记:ASCII,Unicode和UTF-8(转载)

    注:我注释的地方有 add by zhj.另Unicode.UTF-8.GB2312查询http://www.2fz1.com/so/ 在python中,a.decode(xxx)就是把str类型的字 ...