(20)備忘錄模式
阿新 • • 發佈:2021-12-07
概念
備忘錄主要用於記錄狀態,便於回滾,常用於記錄快照,或者儲存資料到磁碟。當資料發生問題時,再從磁碟讀取當初存檔的資料還原。
例如我玩個遊戲,打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