java设计模式之备忘录模式
备忘录模式
备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。一听到备忘录这个字的时候想起了小小时打的游戏,每次遇到大boss的时候都会保存一下进度,打过了就不需要恢复记录,打不过肯定就复原到刚刚保存的记录咯,重新打一遍BOSS,打死为止。哈哈,这就是备忘录模式,虽然很多模式都只是学到基础,但是发现越来越接近生活了。
备忘录模式UML图
备忘录模式代码
package com.roc.meomory;
/**
* 游戏角色
* @author liaowp
*
*/
public class GameRole {
private int vit;
private int atk; public void init(){
vit=100;
atk=100;
} public void show(){
System.out.println("体力:"+vit);
System.out.println("攻击力:"+atk);
} public void fightBoss(){
this.vit=0;
this.atk=0;
} public RoleStateMemento saveMemento(){
return (new RoleStateMemento(vit, atk));
} public void recove(RoleStateMemento roleStateMemento){
this.vit=roleStateMemento.getVit();
this.atk=roleStateMemento.getAtk();
}
}
package com.roc.meomory;
/**
* 游戏角色管理类
* @author liaowp
*
*/
public class RoleStateMange { private RoleStateMemento memento; public RoleStateMemento getMemento() {
return memento;
} public void setMemento(RoleStateMemento memento) {
this.memento = memento;
} }
package com.roc.meomory;
/**
* 存储类
* @author liaowp
*
*/
public class RoleStateMemento { private int vit;
private int atk; public RoleStateMemento(int vit, int atk){
this.vit=vit;
this.atk=atk;
} 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;
}
}
package com.roc.meomory;
/**
* 备忘录模式
* @author liaowp
*
*/
public class Client {
public static void main(String[] args) {
GameRole liaowp=new GameRole();
liaowp.init();
liaowp.show();
RoleStateMange adminMange=new RoleStateMange();
adminMange.setMemento(liaowp.saveMemento());//保存
liaowp.fightBoss();
liaowp.show();
liaowp.recove(adminMange.getMemento());
liaowp.show(); }
}
备忘录模式适用场景
适合功能比较复杂的,但需要维护或记录属性历史的功能。
java设计模式之备忘录模式的更多相关文章
- 折腾Java设计模式之备忘录模式
原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...
- java设计模式9.备忘录模式、访问者模式、调停者模式
备忘录模式 备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象.备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对 ...
- Java设计模式应用——备忘录模式
备忘录模式主要用于存档.游戏中我们打boss前总会存档,如果打boss失败,则读取存档,重新挑战boss. 可以看出来,备忘录模式一般包括如下数据结构 1. 存档文件:用于恢复备份场景的必要数据: 2 ...
- 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)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
随机推荐
- C#~异步编程续~.net4.5主推的await&async应用
返回目录 之前写过两篇关于异步编程的文章,详细可以进入C#~异步编程和C#~异步编程在项目中的使用 .net的各个版本都有自己主推的技术,像.NET1.1中的委托,.NET2.0中的泛型,.NET3. ...
- EC笔记:第二部分:12、复制对象时勿忘其每一个成分
EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ p ...
- IDCM项目学习笔记
项目介绍: IDCM:Internet Data center monitoring 网络数据中心监控平台 IRP:Information Resource planing 信息资源规划 1.设置表中 ...
- 怎么用SAX生成xml文件
public void createXML() throws Exception{ Book b1 = new Book(); b1.setId("1"); b1.setName( ...
- No.023:Merge k Sorted Lists
问题: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...
- 禁止root用户远程登录
Linux修改ssh端口22 vi /etc/ssh/ssh_config vi /etc/ssh/sshd_config 然后修改为port 8888 以root身份service sshd res ...
- 《对象及DOM知识点及其应用1》
1.图片间的来回切换用if{}else{}; <超链接方式的切换图片(常用)>如:<a href="../images1/1-small.jpg" id=&quo ...
- H5与CS3权威上.5 绘制图形(1)
1.canvas元素基础知识 (1)在页面上放置canvas元素,相当于在页面上放置一块"画布",可以用Javascript编写在其中进行绘画的脚本. (2)在页面中放置canva ...
- css之水平居中设置
行内元素: div,p{text-align:center;} 定宽块状元素: 第一宽度固定,第二margin-left和margin-right均是auto.div{border:1px ...
- arcgis server10.2.2之地理编码服务发布
1.地理编码工具(Geocoding Tools)locator制作 打开arcCatalog,找到工具箱ArcToolbox中的Geocoding Tools---Create Addres ...