コード例 #1
0
ファイル: Memento.cs プロジェクト: NRatel/DesignPatterns
        public static void Main()
        {
            Originator originator = new Originator();
            CareTaker  careTaker  = new CareTaker();

            originator.ChangeState(new State("状态一"));
            originator.ChangeState(new State("状态二"));

            //存储当前状态
            string key = originator.GetState().name;

            careTaker.AddMemento(key, originator.CreateMemento());

            originator.ChangeState(new State("状态三"));

            //恢复到之前备份的某一状态
            originator.RestoreFromMemento(careTaker.GetMemento(key));

            Debug.Log("目前状态:" + originator.GetState().name);
        }
コード例 #2
0
ファイル: Memento.cs プロジェクト: NRatel/DesignPatterns
        //白箱备忘录
        //暴露了备忘录中的状态给任何对象
        //public State GetState()
        //{
        //    return state;
        //}

        //黑箱备忘录
        //提供一个方法,反调“以参数形式传入的Originator”的改变状态接口(或者将originator直接放在Memento构造时)。
        //这样, 虽然这个方法是公有的,但只可能被Originator使用, 保证了备忘录的安全性。缺点是, Memento反向依赖了Originator,增加了耦合度。
        public void Restore(Originator originator)
        {
            originator.ChangeState(this.state);
        }