# -*- coding: utf-8 -*-
# 备忘录模式应用场景
"""
- 定义:
1. 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 保存这个状态.
2. 可以恢复原来保存的状态
3. 如果保存的状态过多,可以通过备忘录管理者角色来管理备忘录
- 场景:
撤销场景,事务回滚的应用,副本监控场景
"""
import random
class Memenot:
vitality = 0
attack = 0
defense = 0
def __init__(self, vitality, attack, defense):
self.vitality = vitality
self.attack = attack
self.defense = defense
class GameCharacter():
vitality = 0 # 生命值
attack = 0 # 攻击值
defense = 0 # 防御值
def disPlayState(self):
print('Current Values:')
print(f'Life:{self.vitality}')
print(f'Attack:{self.attack}')
print(f'Defence:{self.defense}')
def initState(self, vitality, attack, defense):
self.vitality = vitality
self.attack = attack
self.defense = defense
def saveState(self):
return Memenot(self.vitality, self.attack, self.defense)
def recoverState(self, memeto):
self.vitality = memeto.vitality
self.attack = memeto.attack
self.defense = memeto.defense
class FightCharactor(GameCharacter):
def fight(self):
"""
# 攻击
:return:
"""
self.vitality -= random.randint(1, 10)
if __name__ == '__main__':
game_chrctr = FightCharactor() # 战斗 obj
game_chrctr.initState(100, 79, 60) # 设置 属性
game_chrctr.disPlayState() # 打印 属性信息
# 保存 游戏对象的状态
memeto = game_chrctr.saveState()
game_chrctr.fight() # 战斗
game_chrctr.disPlayState() # 打印 战斗后的属性
# 恢复状态
game_chrctr.recoverState(memeto) # 恢复状态
game_chrctr.disPlayState() # 打印 恢复后的信息