static bool TestMementoPattern() { Console.WriteLine("TESTING THE MEMENTO DESIGN PATTERN: "); Originator <StateObject> current = new Originator <StateObject>(); current.SetState(new StateObject { Id = 1, Name = "Object 1" }); CareTaker <StateObject> .SaveState(current); current.ShowState(); current.SetState(new StateObject { Id = 2, Name = "Object 2" }); CareTaker <StateObject> .SaveState(current); current.ShowState(); current.SetState(new StateObject { Id = 3, Name = "Object 3" }); CareTaker <StateObject> .SaveState(current); current.ShowState(); Console.WriteLine("Restoring the first state"); CareTaker <StateObject> .RestoreState(current, 0); current.ShowState(); return(true); }
private static void BehavioralPaterns() { #region Chain of Responsability Console.WriteLine("Chain of reasponsability"); Handler h1 = new ConcretHandler("Handler 1"); h1.Condition = (value) => value > -1 && value < 5; Handler h2 = new ConcretHandler("Handler 2"); h2.Condition = (value) => value >= 5 && value < 10; Handler h3 = new ConcretHandler("Handler 3"); h3.Condition = (value) => value > 10 && value < 20; h1.Successor = h2; h2.Successor = h3; foreach (var i in new int[] { 3, 4, 6, 11, 12, 18 }) { h1.HandleRequest(i); } #endregion #region Iterator Console.WriteLine("Iterator"); Aggregate <Iterator> ag = new Aggregate <Iterator>(); ag[0] = "A"; ag[1] = "B"; ag[2] = "C"; // Creating the iterator based on Aggregate instance Iterator it = ag.CreateIterator() as Iterator; object item = it.First(); while (item != null) { Console.WriteLine(item); item = it.Next(); } #endregion #region Mememnto Console.WriteLine("Mememnto"); Originator <StateObject> current = new Originator <StateObject>(); current.SetState(new StateObject { Id = 1, Name = "Object one" }); CareTaker <StateObject> .SaveState(current); current.SetState(new StateObject { Id = 2, Name = "Object two" }); CareTaker <StateObject> .SaveState(current); current.ShowState(); current.SetState(new StateObject { Id = 3, Name = "Object three" }); CareTaker <StateObject> .SaveState(current); current.ShowState(); // restore to specific state CareTaker <StateObject> .RestoreState(current, 0); current.ShowState(); #endregion }