static void Main(string[] args) { // Create an originator. var originator = new Originator <Character>(); // Create a caretaker with passed originator instance. var caretaker = new Caretaker <Character>(originator); // Create Alice character with default stats. var alice = new Character("Alice"); // Create others characters with initial stats. var bob = new Character("Bob", 12, 10, 11); var christine = new Character("Christine", 25, -4, 0); // Set state to Alice. originator.SetState(alice); // Save state. caretaker.Save(); // Set state to Bob. originator.SetState(bob); var bobMemento = caretaker.Save(); // Set state to Christine. originator.SetState(christine); caretaker.Save(); // Restore state back to Bob. caretaker.Restore(bobMemento); }