備忘錄模式(memento),是一種行為性模型,行為型模式關注的是系統中物件之間的相互互動,解決系統在執行時物件之間的相互通訊和協作,進一步明確物件的職責。相比來說,建立型模式關注物件的建立過程,結構型模式關注物件和類的組合關係。
我們對一些操作,需要有儲存狀態,甚至需要恢復到之前狀態的要求,這個時候可以使用備忘錄模式。備忘錄模式實際是要儲存之前的狀態,用來讓機器可以恢復到之前的狀態。
源髮器類:被記錄備忘的類
備忘錄類:儲存備忘資訊的類
負責人類:儲存和管理備忘錄類的類(因為可能需要儲存不止乙個備忘資訊)。
//需要儲存的物件
public
class playload
//進行備忘資訊,並返回備忘的備份
public memento memento()
//取出備忘資訊的方法
public
void
recovery(memento memento)
//相應屬性的set和get方法
public string getplaylevel()
public
void
setplaylevel(string playlevel)
public
intgethp()
public
void
sethp(int hp)
public
intgetmp()
public
void
setmp(int mp)
}//備忘錄類:儲存備忘資訊
public
class memento
public string getplaylevel()
public
void
setplaylevel(string playlevel)
public
intgethp()
public
void
sethp(int hp)
public
intgetmp()
public
void
setmp(int mp)
}//負責人物件:負責儲存備忘資訊
public
class caretaker
//放入儲存資訊
public
void
pushtm(memento m)
}//客戶端呼叫
public
class client
}
輸出的結果為:
現在是第一關,還有血量2000,還有魔法值1900
現在是第二關,還有血量1800,還有魔法值1700
現在是第三關,還有血量100,還有魔法值100
現在是第二關,還有血量1800,還有魔法值1700
現在是第一關,還有血量2000,還有魔法值1900
由此可見備忘資訊已經可以成功的儲存和取出。
其實本例子更應該用map的方式去儲存,因為遊戲的存檔讀檔對於順序沒有太高的要求,反而需要客戶端能明白自己要呼叫的儲存資訊是哪個,用map的鍵值對儲存更適合。
但是對於像文件操作,軟體操作的存檔,比較適合用state去儲存,因為一般恢復都是就近的操作存檔進行恢復。
GOF23之備忘錄模式
在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態 棋類遊戲中的悔棋操作 普通軟體中的撤銷 事務管理中的回滾操作 原發器 originator 他是乙個普通類,可以建立乙個備忘錄,並儲存他的內部狀態,也可以使用備忘錄來恢復其內部狀態,一...
GOF23 設計模式
design patterns elements of reusable object oriented software 即後述 設計模式 一書 由 erich gamma richard helm ralph johnson 和 john vlissides 合著 addison wesley,...
設計模式GOF23 工廠模式
簡單工廠模式 static factory method 是建立者模式的一種,是負責建立物件的模式。工廠模式是為了實現建立物件和呼叫物件分離的需求。簡單工廠用來生產同一等級結構中的任意產品。對於新增的產品需要修改已有 工廠方法模式用來生產同意等級結構中的固定產品。支援增加任意產品 抽象工廠模式用來生...