备忘录模式

来源:互联网 发布: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
原创粉丝点击