設計模式GOF23 備忘錄模式

2021-07-16 17:22:02 字數 1659 閱讀 9409

備忘錄模式(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 是建立者模式的一種,是負責建立物件的模式。工廠模式是為了實現建立物件和呼叫物件分離的需求。簡單工廠用來生產同一等級結構中的任意產品。對於新增的產品需要修改已有 工廠方法模式用來生產同意等級結構中的固定產品。支援增加任意產品 抽象工廠模式用來生...