個人博客
http://www.milovetingting.cn
備忘錄模式
模式介紹
備忘錄是一種行為模式,用于保存物件當前狀態,并且在之后可以再次恢復到此狀態,備忘錄模式實作的方式需要保證被保存的物件不能從外部訪問,目的是為了保護好保存的這些物件狀態的完整性以及內部實作不向外部暴露,
模式定義
在不破壞封閉的前提下,捕獲一個物件的內部狀態,并在該物件之外保存這個狀態,這樣,以后可將該物件恢復到原先保存的狀態,
使用場景
-
需要保存一個物件在某一個時刻的狀態或部分狀態,
-
如果用一個介面來讓其他物件得到這些狀態,將會暴露物件的實作細節并破壞物件的封裝性,一個物件不希望外界直接訪問其內部狀態,通過中間物件可以間接訪問其內部狀態,
簡單使用
定義備忘錄
public class Memo {
public int checkPoint;
public int lifeValue;
@Override
public String toString() {
return "Memo [checkPoint=" + checkPoint + ", lifeValue=https://www.cnblogs.com/milovetingting/p/" + lifeValue + "]";
}
}
定義管理器
public class Manager {
Memo memo;
public void save(Memo memo) {
this.memo = memo;
}
public Memo getMemo() {
return memo;
}
}
定義游戲
public class Game {
private int mCheckPoint = 1;
private int mLifeValue = https://www.cnblogs.com/milovetingting/p/100;
public void play() {
System.out.println("玩游戲:" + String.format("第%d關", mCheckPoint));
mLifeValue -= 10;
System.out.println("進入下一關");
mCheckPoint++;
System.out.println(String.format("到達%d關", mCheckPoint));
}
public void exit() {
System.out.println("-------------------");
System.out.println("退出游戲前屬性:" + this.toString());
System.out.println("退出游戲");
System.out.println("-------------------");
}
public Memo createMemo() {
Memo memo = new Memo();
memo.checkPoint = mCheckPoint;
memo.lifeValue = mLifeValue;
return memo;
}
public void restore(Memo memo) {
mCheckPoint = memo.checkPoint;
mLifeValue = memo.lifeValue;
System.out.println("恢復后的游戲屬性:" + this.toString());
}
@Override
public String toString() {
return "Game [mCheckPoint=" + mCheckPoint + ", mLifeValue=" + mLifeValue + "]";
}
}
使用
public class Main {
public static void main(String[] args) {
Game game = new Game();
//打游戲
game.play();
Manager manager = new Manager();
//存檔
manager.save(game.createMemo());
//退出游戲
game.exit();
//恢復游戲
Game newGame = new Game();
newGame.restore(manager.getMemo());
}
}
輸出結果
玩游戲:第1關
進入下一關
到達2關
-------------------
退出游戲前屬性:Game [mCheckPoint=2, mLifeValue=https://www.cnblogs.com/milovetingting/p/90]
退出游戲
-------------------
恢復后的游戲屬性:Game [mCheckPoint=2, mLifeValue=90]
小結
備忘錄模式是在不破壞封裝的條件下,通過備忘錄物件存盤另外一個物件內部的快照,在將來合適的時候把這個物件還原到存盤起來的狀態,
優點
給用戶提供了一種可以恢復狀態的機制,可以使用戶能夠比較方便地回到某個歷史的狀態,
實作了資訊的封裝,使用用戶不需要關心狀態的保存細節,
缺點
消耗資源,如果類的成員變數過多,勢必會占用較大的資源,而且每一次保存都會消耗一定的記憶體,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/26069.html
標籤:設計模式
上一篇:Java設計模式之單例模式
下一篇:java設計模式1——單例模式
