1. 程式人生 > 其它 >(20)備忘錄模式

(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