備忘錄模式在不破壞封閉的前提下,捕獲一個對象的內部狀態,並在該對象以外保存這個狀態,以便恢復到原先保存的狀態,屬於行爲型模式。 bash
優勢:ui
缺點:this
定義發起人角色Game 類spa
public class Game {
private int level = 1;
private int coin = 0;
public void upgrade() {
level++;
coin += level * 100;
}
public void exit(){
// 退出遊戲邏輯
}
public Memento createMemento() {
return new Memento(level, coin);
}
public void setMemento(Memento memento) {
this.level = memento.getLevel();
this.coin = memento.getCoin();
}
}
複製代碼
定義備忘錄角色Mementocode
public class Memento {
private int level;//等級
private int coin;//金幣數量
public Memento(int level, int coin) {
this.level = level;
this.coin = coin;
}
public int getCoin() {
return coin;
}
public int getLevel() {
return level;
}
}
複製代碼
定義備忘錄管理員角色Caretakercdn
public class Caretaker {
private Memento memento;
public void setMemento(Memento memento) {
this.memento = memento;
}
public Memento getMemento() {
return memento;
}
}
複製代碼
客戶端調用對象
Game game = new Game();
game.upgrade();
Memento memento = game.createMemento();//建立存檔
Caretaker caretaker = new Caretaker();
caretaker.setMemento(memento);//保存存檔
game.exit();//退出遊戲
Game secondGame = new Game();
secondGame.setMemento(caretaker.getMemento());//讀取存檔
複製代碼