sets and gets values from the currently targeted memento. Creates new memenots and assigns current values to them.
        public static void BaseSample()
        {
            Originator originator = new Originator();

            originator.State = "state1";
            Console.WriteLine($"originator的状态 {originator.State}");
            Caretaker caretaker = new Caretaker();

            caretaker.Memento = originator.CreateMemento();
            originator.State  = "state2";
            Console.WriteLine($"originator的状态 {originator.State}");
            Console.WriteLine("开始通过备忘录恢复");
            originator.RestoreMemento(caretaker.Memento);
            Console.WriteLine($"originator的状态 {originator.State}");

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            var savedStates = new List <Originator.Memento>();

            var originator = new Originator();

            originator.Set("State #1");
            originator.Set("State #2");
            savedStates.Add(originator.SaveToMemento());
            originator.Set("State #3");
            savedStates.Add(originator.SaveToMemento());
            originator.Set("State #4");

            originator.RestoreFromMemento(savedStates.Last());

            Console.ReadLine();
        }
Example #3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.WriteLine("--------------------ObserverPattern--------------------");
            Console.WriteLine();
            IList <Contact> contacts = new List <Contact>
            {
                new Contact {
                    Name = "张三", MobileNumber = "13566778901"
                },
                new Contact {
                    Name = "李四", MobileNumber = "15835368686"
                },
                new Contact {
                    Name = "王五", MobileNumber = "15160266300"
                }
            };
            var originator = new Originator("Bean", contacts);

            originator.Show();
            Console.WriteLine();

            //创建备忘录
            var manager = new MementoManager();
            var memento = originator.CreateMemento();

            manager.ContactMementoList.Add(originator.Name, new List <ContactMemento> {
                memento
            });
            manager.Show();
            Console.WriteLine();

            //修改通讯录
            Console.WriteLine("----------------移除最后一个联系人---------");
            originator.Contacts.RemoveAt(2);
            originator.Show();
            Console.WriteLine();

            //回复通讯录
            Console.WriteLine("----------------回复通讯录列表-------------");
            originator.RestoreMemento(memento);
            originator.Show();

            Console.ReadKey();
        }
Example #4
0
        static void Main(string[] args)
        {
            Originator originator = new Originator();
            CareTaker  careTaker  = new CareTaker();

            originator.SetState("State #1");
            originator.SetState("State #2");
            careTaker.Add(originator.SaveStateToMemento());
            originator.SetState("State #3");
            careTaker.Add(originator.SaveStateToMemento());
            originator.SetState("State #4");

            Console.WriteLine("Current State: " + originator.GetState());
            originator.GetStateFromMemento(careTaker.Get(0));
            Console.WriteLine("First saved State: " + originator.GetState());
            originator.GetStateFromMemento(careTaker.Get(1));
            Console.WriteLine("Second saved State: " + originator.GetState());
        }
Example #5
0
        /// <summary>
        /// 单个撤销
        /// </summary>
        public static void Invoke()
        {
            //创建原发器对象
            Originator originator = new Originator("状态1");

            Console.WriteLine(originator.GetState());
            //创建负责人对象
            Caretaker caretaker = new Caretaker();

            caretaker.SetMemento(originator.CreateMemento());

            originator.SetState("状态2");
            Console.WriteLine(originator.GetState());

            //从负责人对象中取出备忘录对象
            originator.RestoreMemento(caretaker.GetMemento());
            Console.WriteLine(originator.GetState());
        }
Example #6
0
        // Intent: Without violating encapsulation, capture and externalize
        //         an object's internal state so that the object can be restored
        //         to this state later.
        //
        // Memento存储Originator的状态
        // Originator创建一个Memento,记录状态;使用Memento恢复状态
        // CareTaker拥有Memento,负责存取

        static void Main(string[] args)
        {
            var originator = new Originator {
                State = "Original State"
            };

            Console.WriteLine(originator.State);

            var caretaker = new Caretaker();

            caretaker.SaveMemento(originator.CreateMemento());

            originator.State = "New State";
            Console.WriteLine(originator.State);

            originator.RestoreFromMemento(caretaker.OriginatorMemento);
            Console.WriteLine(originator.State);
        }
Example #7
0
        public static void Main(string[] args)
        {
            #region Prototype

            var originator = new Originator
            {
                State = "On"
            };
            originator.Show();

            var caretaker = new Caretaker
            {
                Memento = originator.CreateMemento()
            };

            originator.State = "Off";
            originator.Show();

            originator.SetMemento(caretaker.Memento);
            originator.Show();

            Console.WriteLine();

            #endregion Prototype

            var lixiaoyao = new GameRole();
            lixiaoyao.StateDisplay();

            //保存状态
            var stateCaretasker = new RoleStateCarertaker
            {
                Memento = lixiaoyao.SaveState()
            };

            // 大战 Boss
            lixiaoyao.FightWithBoss();
            lixiaoyao.StateDisplay();

            // 快被 Boss 打挂了,恢复之前的状态,继续打
            lixiaoyao.RecoveryState(stateCaretasker.Memento);
            lixiaoyao.StateDisplay();

            Console.ReadLine();
        }
Example #8
0
        public static void Main(string[] args)
        {
            Caretaker caretaker = new Caretaker();

            Originator org = new Originator("Memento Pattern", "Gruppe 0", "This is just a test", DateTime.UtcNow);

            org.PrintState();

            caretaker.Save(org.SaveToMemento());

            Thread.Sleep(3000);

            org.Description = "The pattern can be used for many things like this.";
            org.Author      = "Gruppe 25";

            caretaker.Save(org.SaveToMemento());

            org.PrintState();

            Thread.Sleep(2000);

            org.Description = "The pattern can be used for many thi...";
            org.Author      = "Gruppe 26";


            org.PrintState();

            caretaker.Save(org.SaveToMemento());

            Thread.Sleep(1000);

            org.Description = "The pattern can be used for am back to ear....";

            org.PrintState();

            Thread.Sleep(1000);

            Console.WriteLine("\n\nRolling back two changes -> result:\n ");

            org.RestoreFromMemento(caretaker.Restore(1));

            org.PrintState();
        }
Example #9
0
        static void Main(string[] args)
        {
            Originator originator = new Originator();

            originator.State = "OK";
            originator.Show();

            Caretaker caretaker = new Caretaker();

            caretaker.Memento = originator.CreateMemento();

            originator.State = "NOT OK";
            originator.Show();

            originator.SetMmemnto(caretaker.Memento);
            originator.Show();

            Console.ReadKey();
        }
Example #10
0
        /// <summary>
        /// 多次撤销
        /// </summary>
        public static void Invokes()
        {
            Console.WriteLine("=====================多次撤销====================");
            //创建原发器对象
            Originator originator = new Originator("状态1");

            Play(originator);
            originator.SetState("状态2");
            Play(originator);
            //撤销状态2
            Console.WriteLine("=====================准备撤销====================");
            Undo(originator, Index);
            //取消撤销
            Console.WriteLine("=====================取消撤销====================");
            Redo(originator, Index);
            //补加状态3
            Console.WriteLine("=====================新增状态====================");
            originator.SetState("状态3");
            Play(originator);
        }
Example #11
0
        public static void Main()
        {
            Originator<string> originator = new Originator<string>();

            originator.SetState("state0");
            Caretaker<string>.SaveState(originator); // save state of the originator
            originator.ShowState();

            originator.SetState("state1");
            Caretaker<string>.SaveState(originator); // save state of the originator
            originator.ShowState();

            originator.SetState("state2");
            Caretaker<string>.SaveState(originator); // save state of the originator
            originator.ShowState();

            // restore state of the originator
            Caretaker<string>.RestoreState(originator, 0);
            originator.ShowState();  // shows state0
        }
Example #12
0
        static void Main(string[] args)
        {
            Originator o = new Originator();

            o.State = "On";

            Caretaker c = new Caretaker();

            c.Memento = o.CreateMemento();

            o.State = "Off";
            if (!o.State.ToUpper().Equals(c.Memento.State.ToUpper()))
            {
                o.SetMemento(c.Memento);
            }

            Console.WriteLine("Originator's state = " + o.State);

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("***Memento Pattern Demo***\n");
            //Originator is initialized with a state
            Originator originatorObject = new Originator();
            Memento    mementoObject;

            originatorObject.State = " Initial state ";
            //Console.WriteLine("Current State : {0} ", originatorObject.State);

            mementoObject = originatorObject.GetTheMemento();
            //Making a new state
            originatorObject.State = " Intermediary state ";

            // Restore to the previous state
            originatorObject.RevertToState(mementoObject);
            //Console.WriteLine("Current State : {0} ", originatorObject.State);

            // Wait for user's input
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Originator o = new Originator();

            o.State = "On"; // 初始化状态
            o.Show();

            Caretaker c = new Caretaker();

            c.Memento = o.CreateMemento();

            // 修改状态
            o.State = "Off";
            o.Show();

            // 恢复状态
            o.SetMemento(c.Memento);
            o.Show();

            Console.Read();
        }
Example #15
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            Customer customer = new Customer {
                FirstName = "John", LastName = "Smith"
            };

            Originator originator = new Originator(customer);
            Caretaker  caretaker  = new Caretaker(originator);

            caretaker.Backup();
            customer.FirstName = "Bob";

            caretaker.Backup();
            customer.FirstName = "Jerzy";

            caretaker.ShowHistory();

            Console.WriteLine(customer);

            caretaker.Undo();
            Console.WriteLine(customer);

            caretaker.Undo();
            Console.WriteLine(customer);

            Console.WriteLine(customer);

            customer.BeginEdit();

            customer.FirstName = "Bob";

            Console.WriteLine(customer);

            customer.CancelEdit();

            Console.WriteLine(customer);
        }
Example #16
0
        public static void Main(string[] args)
        {
            Originator originator = new Originator();
            CareTaker  caretaker  = new CareTaker();

            originator.setState("State #1");
            originator.setState("State #2");
            caretaker.Add(originator.saveStateToMemento());

            originator.setState("State #3");
            caretaker.Add(originator.saveStateToMemento());

            originator.setState("State #4");
            Console.WriteLine(String.Format("Current state: {0}", originator.getState()));

            originator.getStateFromMemento(caretaker.Get(0));
            Console.WriteLine(String.Format("First saved state: {0}", originator.getState()));
            originator.getStateFromMemento(caretaker.Get(1));
            Console.WriteLine(String.Format("Second saved state: {0}", originator.getState()));

            Console.ReadLine();
        }
Example #17
0
        static void Main(string[] args)
        {
            Console.WriteLine("***Memento Pattern QAs***");
            Console.WriteLine("***Demonstration-Caretaker is using multiple restore points * **\n");
            //Originator is initialized with a state
            Originator      originatorObject = new Originator();
            Memento         mementoObject;
            IList <Memento> savedStates = new List <Memento>();

            Console.WriteLine("A new set of verification");
            //State-1
            originatorObject.State = "State-1";
            savedStates.Add(originatorObject.GetTheMemento());
            //State-2
            originatorObject.State = "State-2";
            savedStates.Add(originatorObject.GetTheMemento());
            //State-3
            originatorObject.State = "State-3";
            savedStates.Add(originatorObject.GetTheMemento());
            //State-4 which is not saved
            originatorObject.State = "State-4";
            //Available restore points
            Console.WriteLine("Currently available restore points are :");
            foreach (Memento m in savedStates)
            {
                Console.WriteLine(m.State);
            }
            //Roll back starts...
            Console.WriteLine("Started restoring process...");
            for (int i = savedStates.Count; i > 0; i--)
            {
                mementoObject       = originatorObject.GetTheMemento();
                mementoObject.State = savedStates[i - 1].State;
                originatorObject.RevertToState(mementoObject);
            }
            // Wait for user
            Console.ReadKey();
        }
Example #18
0
        static void Main(string[] args)
        {
            Originator originator = new Originator()
            {
                Status      = "张三",
                OtherStatus = "你好"
            };


            Caretaker caretaker = new Caretaker()
            {
                Memento = originator.CreateMemento()
            };

            // 修改
            originator.Status = "李四";
            Console.WriteLine($"修改后的值:{originator.Status}");
            // 撤销
            originator.RecoveryMemento(caretaker.Memento);
            Console.WriteLine($"赋值错误,修复中...");
            Console.WriteLine($"撤销已完成:{originator.Status}");
            Console.ReadKey();
        }
Example #19
0
        static void Main(string[] args)
        {
            IList <Originator.Memento> savedStates = new List <Originator.Memento>();

            Originator originator = new Originator("A", "B");

            originator.saveMemento();
            savedStates.Add(originator.getMemento());

            originator.setStr("C", "D");
            originator.saveMemento();
            savedStates.Add(originator.getMemento());

            originator.setStr("E", "F");
            originator.saveMemento();
            savedStates.Add(originator.getMemento());

            foreach (Originator.Memento mem in savedStates)
            {
                Console.WriteLine(mem.getStr1() + " " + mem.getStr2());
            }

            Console.ReadKey();
        }
Example #20
0
 internal Memento(Originator originator)
 {
     state = originator.GetState();
 }
Example #21
0
 public Caretaker(Originator originator)
 {
     this._originator = originator;
 }
Example #22
0
        static void Main(string[] args)
        {
            Console.WriteLine("***Memento Pattern Demonstration-1.***\n");
            //Originator is initialized.The constructor will create a born state.
            originatorObject = new Originator();
            ////For Q&A session only(Shouldn't be used)
            //currentMemento = new Memento();
            //currentMemento.State = "Arbitrary state set by caretaker";

            IList <Memento> savedStates = new List <Memento>();

            /*
             * Adding a memento the list.This memento stores
             * the current state of the Origintor.
             */
            savedStates.Add(originatorObject.CurrentMemento());

            //Snapshot #1.
            originatorObject.State = "Snapshot #1";
            //Adding this memento as a  restore point
            savedStates.Add(originatorObject.CurrentMemento());


            //Snapshot #2.
            originatorObject.State = "Snapshot #2";
            //Adding this memento as a  restore point
            savedStates.Add(originatorObject.CurrentMemento());

            //Snapshot #3.
            originatorObject.State = "Snapshot #3";
            //Adding this memento as a  restore point
            savedStates.Add(originatorObject.CurrentMemento());

            //Snapshot #4. It is not added as a restore point.
            originatorObject.State = "Snapshot #4";

            //Available restore points
            Console.WriteLine("\nCurrently available restore points are :");
            foreach (Memento m in savedStates)
            {
                Console.WriteLine(m.State);
            }
            ////Directly going back to Snapshot #2
            //currentMemento = savedStates[2];
            //originatorObject.RestoreMemento(currentMemento);

            //Undo's
            //Roll back starts...
            Console.WriteLine("\nPerforming undo's now.");
            for (int i = savedStates.Count; i > 0; i--)
            {
                //Get a restore point
                currentMemento = savedStates[i - 1];
                originatorObject.RestoreMemento(currentMemento);
            }
            //Redo's
            Console.WriteLine("\nPerforming redo's now.");
            for (int i = 1; i < savedStates.Count; i++)
            {
                currentMemento = savedStates[i];
                originatorObject.RestoreMemento(currentMemento);
            }
            // Wait for user
            Console.ReadKey();
        }
Example #23
0
 //restore state of the originator
 public static void RestoreState(Originator <T> orig, int stateNumber)
 {
     orig.SetMemento(mementoList[stateNumber]);
 }
Example #24
0
 //save state of the originator
 public static void SaveState(Originator <T> orig)
 {
     mementoList.Add(orig.CreateMemento());
 }