Python設計模式-備忘錄模式
Python設計模式-備忘錄模式
程式碼基於3.5.2,程式碼如下;
#coding:utf-8
#備忘錄模式
import random
class gameCharacter():
vitality = 0
attack = 0
defense = 0
def displayState(self):
print("Current Values:")
print("Life : {0}".format(self.vitality))
print("Attack : {0}".format(self.attack) )
print("Defence : {0}".format(self.defense))
def initState(self,vitality,attack,defense):
self.vitality = vitality
self.attack = attack
self.defense = defense
def saveState(self):
return memento(self.vitality,self.attack,self.defense)
def recoverState(self,memento):
self.vitality = memento.vitality
self.attack = memento.attack
self.defense = memento.defense
class fightCharactor(gameCharacter):
def fight(self):
self.vitality = random.randint(1,10)
class memento():
vitality = 0
attack = 0
defense = 0
def __init__(self,vitality,attack,defense):
self.vitality = vitality
self.attack = attack
self.defense = defense
if __name__ == "__main__":
game_chrctr = fightCharactor()
game_chrctr.initState(100,80,90)
game_chrctr.displayState()
state = game_chrctr.saveState()
game_chrctr.fight()
game_chrctr.displayState()
game_chrctr.recoverState(state)
game_chrctr.displayState()
備忘錄模式分析與解讀
備忘錄模式
備忘錄模式,在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態;在備忘錄模式中,如果要儲存的狀態多,可以創造一個備忘錄管理者角色來管理備忘錄。
程式碼解讀
該例子基於的需求:儲存遊戲進度的功能,一般儲存進度是要存在可持久化儲存器上,本例以儲存在記憶體中為例。
1、定義了gameCharacter類,該類實現了displayState狀態顯示方法,顯示當前物件詳細的狀態值;initState初始化物件狀態值方法,當需要對當前物件進行狀態初始化時呼叫;saveState儲存當前物件狀態值方法,該方法主要是返回一個由當前物件狀態值初始化的memento物件;recoverState恢復狀態值方法,通過memento例項物件,將當前gameCharacter物件的狀態值恢復為memento例項物件所儲存的狀態值;
2、memento物件主要是儲存gameCharacter狀態值的物件。
程式碼執行結果如下:
Current Values:
Life : 100
Attack : 80
Defence : 90
Current Values:
Life : 4
Attack : 80
Defence : 90
Current Values:
Life : 100
Attack : 80
Defence : 90
通過執行結果顯示,在呼叫game_chrctr.fight()方法之前儲存過一次狀態,在呼叫之後該物件狀態發生改變Life : 4,然後通過game_chrctr.recoverState(state)後該物件狀態顯示與儲存狀態時,狀態一致。從而完成了狀態的儲存。
備忘錄模式應用場景:
1、需要儲存和回覆資料的相關狀態場景。如儲存遊戲狀態的場景:撤銷場景,事務回滾等;
2、副本監控場景。備忘錄可以當做一個臨時的副本監控,實現非實時和準實時的監控。
優缺點分析
優點
1、使用備忘錄可以把複雜的物件內部資訊對其他的物件遮蔽起來。
缺點
1、當需要儲存的狀態資料很大很多時,會消耗較多資源。
相關文章
- 設計模式----備忘錄模式設計模式
- 設計模式 - 備忘錄模式 ( Memento )設計模式
- 設計模式之備忘錄模式設計模式
- 簡說設計模式——備忘錄模式設計模式
- 極簡設計模式-備忘錄模式設計模式
- GoLang設計模式11 - 備忘錄模式Golang設計模式
- 設計模式漫談之備忘錄模式設計模式
- 設計模式 | 備忘錄模式及典型應用設計模式
- 折騰Java設計模式之備忘錄模式Java設計模式
- 19.java設計模式之備忘錄模式Java設計模式
- 備忘錄設計模式知識概括設計模式
- 行為型設計模式 - 備忘錄模式詳解設計模式
- Rust語言之GoF設計模式:備忘錄Memento模式RustGo設計模式
- 設計模式(Swift) - 2.單例模式、備忘錄模式和策略模式設計模式Swift單例
- 無廢話設計模式(16)行為型模式--備忘錄模式設計模式
- 抽絲剝繭——備忘錄設計模式設計模式
- 《設計模式七》備忘錄、模板方法、狀態模式及設計模式設計總結設計模式
- Swift 中的設計模式 #2 觀察者模式與備忘錄模式Swift設計模式
- 軟體設計模式學習(二十二)備忘錄模式設計模式
- 備忘錄模式(Memento)模式
- Java進階篇設計模式之十二 ---- 備忘錄模式和狀態模式Java設計模式
- 行為型模式:備忘錄模式模式
- 設計模式 第十章 備忘錄模式、直譯器模式、狀態模式設計模式
- 設計模式學習筆記(十八)備忘錄模式及其實現設計模式筆記
- 19_備忘錄模式模式
- 設計模式(二十)——備忘錄模式(遊戲角色狀態恢復問題)設計模式遊戲
- Android備忘錄《單例模式》Android單例模式
- 第 22 章 備忘錄模式模式
- 實驗 20:備忘錄模式模式
- 11.21實驗 20:備忘錄模式模式
- Android原始碼分析之備忘錄模式Android原始碼模式
- 我用備忘錄模式設計了簡易的版本控制系統模式
- 設計模式:可複用物件導向軟體及基礎:4-7 物件行為模式:備忘錄模式(Memento)設計模式物件
- Python 備忘錄Python
- Python 設計模式-命令模式Python設計模式
- 如何給備忘錄設計密碼?Mac上備忘錄設定密碼教程密碼Mac
- python設計模式-模板方法模式Python設計模式
- python設計模式狀態模式Python設計模式
- Python設計模式-外觀模式Python設計模式