• 备忘录模式


    备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式。
    定义(源于GoF《设计模式》):在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
    代码1:备忘需求的发起者
      class GameRole
        {
            //生命力
            private int vit;
            public int Vitality
            {
                get { return vit; }
                set { vit = value; }
            }
    
            //攻击力
            private int atk;
            public int Attack
            {
                get { return atk; }
                set { atk = value; }
            }
    
            //防御力
            private int def;
            public int Defense
            {
                get { return def; }
                set { def = value; }
            }
    
            //状态显示
            public void StateDisplay()
            {
                Console.WriteLine("角色当前状态:");
                Console.WriteLine("体力:{0}", this.vit);
                Console.WriteLine("攻击力:{0}", this.atk);
                Console.WriteLine("防御力:{0}", this.def);
                Console.WriteLine("");
            }
    
            //保存角色状态
            public RoleStateMemento SaveState()
            {
                return (new RoleStateMemento(vit, atk, def));
            }
    
            //恢复角色状态
            public void RecoveryState(RoleStateMemento memento)
            {
                this.vit = memento.Vitality;
                this.atk = memento.Attack;
                this.def = memento.Defense;
            }
    
    
            //获得初始状态
            public void GetInitState()
            {
                this.vit = 100;
                this.atk = 100;
                this.def = 100;
            }
    
            //战斗
            public void Fight()
            {
                this.vit = 0;
                this.atk = 0;
                this.def = 0;
            }
        }
    

    代码2:备忘录

        //角色状态存储箱
        class RoleStateMemento
        {
            private int vit;
            private int atk;
            private int def;
    
            public RoleStateMemento(int vit, int atk, int def)
            {
                this.vit = vit;
                this.atk = atk;
                this.def = def;
            }
    
            //生命力
            public int Vitality
            {
                get { return vit; }
                set { vit = value; }
            }
    
            //攻击力
            public int Attack
            {
                get { return atk; }
                set { atk = value; }
            }
    
            //防御力
            public int Defense
            {
                get { return def; }
                set { def = value; }
            }
        }
    

    代码3:备忘录管理者

      //角色状态管理者
        class RoleStateCaretaker
        {
            private RoleStateMemento memento;
    
            public RoleStateMemento Memento
            {
                get { return memento; }
                set { memento = value; }
            }
        }
    

    代码4:客户端代码

    class Program
        {
            static void Main(string[] args)
            {
    
                //大战Boss前
                GameRole lixiaoyao = new GameRole();
                lixiaoyao.GetInitState();
                lixiaoyao.StateDisplay();
    
                //保存进度
                RoleStateCaretaker stateAdmin = new RoleStateCaretaker();
                stateAdmin.Memento = lixiaoyao.SaveState();
    
                //大战Boss时,损耗严重
                lixiaoyao.Fight();
                lixiaoyao.StateDisplay();
    
                //恢复之前状态
                lixiaoyao.RecoveryState(stateAdmin.Memento);
    
                lixiaoyao.StateDisplay();
    
    
                Console.Read();
    
            }
        }
    

      

     
  • 相关阅读:
    mpvue: stylus定义主题色
    mpvue: 单个页面自定义导航栏或隐藏
    mpvue: fsevents is not a constructor
    Nginx:taro h5 Nginx代理配置
    git: 替换remote origin
    taro3.x: h5地图兼容组件封装
    taro3.x: h5地图兼容
    taro3.x: 使用taro-router在H5浏览器返回报错
    taro3.x: tarojs-router
    java线程与线程安全的单例模式
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3360724.html
Copyright © 2020-2023  润新知