Administrator
发布于 2024-08-02 / 25 阅读
0
0

备忘录模式

背景描述

在玩单机游戏时,可以在关键点进行存档,并可以回退到某个你历史存档。

代码实现

人物类

public class GameRole
{ 
    public int Vitality { get; set; }
    public int Attack { get; set; }
    public int Defense { get; set; }
    public void StateDisplay()
    {
        Console.WriteLine($"当前角色状态");
        Console.WriteLine($"体力:{Vitality}");
        Console.WriteLine($"攻击:{Attack}");
        Console.WriteLine($"防御:{Defense}");
    }

    public void GetInitState()
    {
        Vitality = 100;
        Attack = 100;
        Defense = 100;
    }
    public void Fight()
    {
        Vitality = 0;
        Attack = 0;
        Defense = 0;
    }
    public RoleStateMemento SaveState()
    {
        return new RoleStateMemento(Vitality, Attack, Defense);
    }

    public void RecoveryState(RoleStateMemento roleStateMemento)
    {
        Vitality = roleStateMemento.Vitality;
        Attack = roleStateMemento.Attack;
        Defense = roleStateMemento.Defense;
    }
}

数据类

    public class RoleStateMemento
    {
        private int mVitality;
        private int mAttack;
        private int mDefense;
        public int Vitality { get { return mVitality; } }
        public int Attack { get { return mAttack; } }
        public int Defense { get { return mDefense; } }
        public RoleStateMemento(int vitality, int attack, int defense)
        {
            mVitality = vitality;
            mAttack = attack;
            mDefense = defense;
        }
    }

存档类

    public class RoleStateCaretaker
    {
        public RoleStateMemento RoleStateMemento { get; set; }
    }

Main方法

    internal class Program
    {
        static void Main(string[] args)
        {

            GameRole role = new GameRole();
            role.GetInitState();
            role.StateDisplay();

            RoleStateCaretaker stateAdmin = new RoleStateCaretaker();
            stateAdmin.RoleStateMemento = role.SaveState();

            role.Fight();
            role.StateDisplay();

            role.RecoveryState(stateAdmin.RoleStateMemento);
            role.StateDisplay();
        }
    }

代码实现

当前角色状态
体力:100
攻击:100
防御:100
当前角色状态
体力:0
攻击:0
防御:0
当前角色状态
体力:100
攻击:100
防御:100

UML图


评论