備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外儲存這個狀態。這樣以後就可將該對象恢複到原先儲存的狀態。
跟原型模式很像,不過在原型模式中儲存對象的一切,而備忘錄模式中只儲存恢複時需要的資料。
#encoding=utf-8##by panda#備忘錄模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')#Originator:遊戲角色類class GameCharacter(): vitality = 0 #生命力 attack = 0 #攻擊力 defense = 0 #防禦力 def DisplayState(self): printInfo('角色目前狀態') printInfo('\t生命力:%d' % self.vitality) printInfo('\t攻擊力:%d' % self.attack) printInfo('\t防禦力:%d' % self.defense) def InitState(self): self.vitality = 100 self.attack = 100 self.defense = 100 def Fight(self): self.vitality = 0 self.attack = 0 self.defense = 0 #儲存狀態 def SaveState(self): return RoleStateMemento(self.vitality, self.attack, self.defense) #恢複狀態 def RecoveryState(self, memento): self.vitality = memento.vitality self.attack = memento.attack self.defense = memento.defense#Memento:角色狀態儲存箱class RoleStateMemento(): vitality = 0 #生命力 attack = 0 #攻擊力 defense = 0 #防禦力 def __init__(self, vitality, attack, defense): self.vitality = vitality self.attack = attack self.defense = defense#Caretaker:角色狀態管理者class RoleStateCaretaker(): memento = None def clientUI(): printInfo('----大戰Boss前----') id1 = GameCharacter() id1.InitState() id1.DisplayState() printInfo('----儲存進度----') stateAdmin = RoleStateCaretaker() stateAdmin.memento = id1.SaveState() printInfo('----大戰boss,損耗嚴重----') id1.Fight() id1.DisplayState() printInfo('----恢複之前的狀態----') id1.RecoveryState(stateAdmin.memento) id1.DisplayState() returnif __name__ == '__main__': clientUI();
類圖: