备忘录模式
来源:互联网 发布:06年奥尼尔总决赛数据 编辑:程序博客网 时间:2024/06/07 13:00
备忘录模式
定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
类图:
备忘录模式的角色:
- 发起人(Originator):要被备份的成员,它提供一创建备忘录的方法,其实就是将它自身的某些信息拷贝一份到一个备忘录对象中。并提供另外一个方法将备忘录中的信息覆盖自身的信息。
- 备忘录(Memento):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状态及获取发起人状态。
- 管理角色(Caretaker):用于管理备忘录对象的实现类。
具体代码实现:
Originator.java
package com.example;import java.util.HashMap;import java.util.Map;public class Originator { private Map<String, Object> map; private int hp; private int mp; private int score; private int level; public Originator() { hp = 100; mp = 100; score = 0; level = 0; map = new HashMap<>(); } public void startPlay() { print("game start before info"); map.clear(); hp -= 10; mp -= 5; score += 20; level += 1; map.put("hp", hp); map.put("mp", mp); map.put("score", score); map.put("level", level); } private void print(String info) { System.out.println(info + ":-->" + "hp:" + map.get("hp") + " mp:" + map.get("mp") + " score:" + map.get("score") + " level:" + map.get("level")); } public Memento createMemeto() { print("game save info"); Memento memento = new Memento(); memento.setState(map); return memento; } public void restore(Memento memento) { map = memento.getState(); print("game restore info"); } public void exit() { hp = 0; mp = 0; score = 0; level = 0; map.clear(); print("game exit info"); }}
Memento.java
public class Memento { private Map<String, Object> map = new HashMap<>(); public Memento() { } public Map<String, Object> getState() { return map; } public void setState(Map<String, Object> map) { this.map.putAll(map); }}
Caretaker.java
public class Caretaker { private Memento memento; public void save(Memento memento) { this.memento = memento; } public Memento get() { return memento; }}
Client.java
public class Client { public static void main(String[] args) { Originator originator = new Originator(); originator.startPlay();//开始游戏 Caretaker manager = new Caretaker(); manager.save(originator.createMemeto());//游戏存档 originator.exit();//游戏退出 originator.restore(manager.get());//恢复存档信息 }}
0 0
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 【链表6】
- Android 自定义标题栏BaseActivity
- KVC与KVO的进阶使用
- Android XML与Json的区别
- python模拟登录csdn
- 备忘录模式
- vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置
- NYOJ95众数问题
- linux-3.0内核移植
- ORACLE在线重定义
- Wiggle Subsequence
- 测试
- 爱的一种解释
- 使用真机调试问题