(20)备忘录模式

概念

备忘录主要用于记录状态,便于回滚,常用于记录快照,或者存储数据到磁盘。当数据发生问题时,再从磁盘读取当初存档的数据还原。

例如我玩个游戏,打boos前我有1000血,1000魔法,我希望打boos之前保存我现在的状态,当打不过时,还能还原成初始状态

实现方式

import lombok.Data;

/**
 * 备忘录
 */
public class Demo {
    public static void main(String[] args) {
        GameRole gameRole = new GameRole();
        System.out.println("==== 打怪前====");
        gameRole.print();

        Memento memento = gameRole.save();// 保存当前的状态

        System.out.println("==== 打怪后 ====");
        gameRole.setHp(0);
        gameRole.setMp(0);
        gameRole.print();

        System.out.println("==== 读档恢复 ====");
        gameRole.read(memento);
        gameRole.print();
    }
}

// 游戏角色
@Data
class GameRole {
    private int hp;// 血量
    private int mp;// 魔法量

    public GameRole() {
        this.hp = 1000;
        this.mp = 1000;
    }

    // 存档
    public Memento save() {
        return new Memento(hp, mp);
    }

    // 读档
    public void read(Memento memento) {
        this.hp = memento.getHp();
        this.mp = memento.getMp();
    }

    public void print() {
        System.out.println(String.format("当前HP为%s -- MP为%s", hp, mp));
    }
}

// 备忘录,记录某一时刻的快照信息
@Data
class Memento {
    private int hp;// 血量
    private int mp;// 魔法量

    public Memento(int hp, int mp) {
        this.hp = hp;
        this.mp = mp;
    }
}

==== 打怪前====
当前HP为1000 -- MP为1000
==== 打怪后 ====
当前HP为0 -- MP为0
==== 读档恢复 ====
当前HP为1000 -- MP为1000

posted @ 2021-12-07 16:41  、嘎路的米。  阅读(37)  评论(0编辑  收藏  举报