设计模式之备忘录模式
来源:互联网 发布:c 变量定义数组长度 编辑:程序博客网 时间:2024/06/06 05:06
备忘录模式
定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
备忘录模式有三个角色:
- Originator:发起人,负责创建一个备忘录,可以记录、恢复自身的内部状态。同时Originator还可以根据需要决定Memento存储自身的哪些内部状态。
- Memento:备忘录角色,用于存储Originator内部状态,并且可以防止Originator以外的对象访问Memento。
- Caretaker:看管人,负责存储备忘录,不能对备忘录的内容进行操作和访问,只能够将备忘录传递给其他对象。
以保存游戏进度为例,退出游戏前存档,再进入游戏就会显示退出之前的状态。
代码示例
游戏发起人类
public class Game { private int point;// 当前关数 public void play(int point) { this.point = point; } public State createState() { return new State(point, new Date().toString()); } public void restoreState(State state) { System.out.println(state.toString()); System.out.println("现在时间为:" + new Date().toString()); point = state.getPoint(); } }
游戏状态类
public class State { private int point; private String date; public State(int point, String date) { super(); this.point = point; this.date = date; } public int getPoint() { return point; } public String toString() { return "当前关卡:" + point + " 时间为:" + date; } }
游戏备忘录
public class GameCaretaker { private State state; public void archive(State state) { this.state = state; } public State load() { return state; } }
客户端
Game game = new Game(); game.play(10);// 玩到第十关 GameCaretaker gameCaretaker = new GameCaretaker(); // 存档 gameCaretaker.archive(game.createState()); // 读档 game.restoreState(gameCaretaker.load());
输出为:
当前关卡:10 时间为:Sat Apr 15 03:21:32 CST 2017
现在时间为:Sat Apr 15 03:21:32 CST 2017
甚至你可以管理一系列的状态,记录和撤销都可以,就像象棋每走一步就保存了当前的棋局,悔棋就是恢复上一步的棋局。总的来说,备忘录模式好处是给用户提供了一种可以恢复状态的机制,而且实现信息的封装,用户不需要关系状态的细节,但是保存的状态过多就会占用大量的资源。不足之处望指教。
0 0
- 设计模式之备忘录
- 设计模式之备忘录
- 设计模式之备忘录
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式 之 备忘录模式
- 设计模式之备忘录模式
- 桥接模式下,虚拟机Ubuntu设置静态IP上网
- 【iOS沉思录】Objective-C语言消息传递机制三道防线:消息转发机制详解
- Android使用第三方SDK——百度地图
- Celery 消息队列
- 利用虚拟机Ubuntu的Samba服务,实现Windows映射网络盘到Ubuntu
- 设计模式之备忘录模式
- 软件测试学习资料
- Android更新Ui的几种方法和见解
- 一步一坑定制Android虚拟机1·引子
- 【cocos2dx】秘籍
- java的运算符、获取键盘输入的整数、顺序和选择的流程控制语句
- Linux /etc/group
- gzip命令
- df 命令