备忘录模式

# -*- 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()  # 打印 恢复后的信息


posted @   染指未来  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示