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(); }
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(); }
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()); }
/// <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()); }
// 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); }
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(); }
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(); }
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(); }
/// <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); }
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 }
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(); }
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); }
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(); }
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(); }
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(); }
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(); }
internal Memento(Originator originator) { state = originator.GetState(); }
public Caretaker(Originator originator) { this._originator = originator; }
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(); }
//restore state of the originator public static void RestoreState(Originator <T> orig, int stateNumber) { orig.SetMemento(mementoList[stateNumber]); }
//save state of the originator public static void SaveState(Originator <T> orig) { mementoList.Add(orig.CreateMemento()); }