//The Runner class creates an instance of the PrototypeManager class, which creates different prototype instances.
//These prototypes are then cloned using shallow copy and deep copy methods.
//The outputs from the difference methods are displayed for comparision.
PrototypeManager manager = new PrototypeManager();
ProtoType c2;
ProtoType c3;

c2 = manager.Prototypes["Australia"].Clone();
Console.WriteLine("\nShallow cloning Australia\n =============== ");
Console.WriteLine("Prototype\t{0}\nClone\t\t{1}", manager.Prototypes["Australia"], c2);

c2.Capital = "Sydney";
Console.WriteLine("\nAltered Clone's shallow state, prototype unaffected");
Console.WriteLine("Prototype\t{0}\nClone\t\t{1}", manager.Prototypes["Australia"], c2);

c2.Language.Data = "Chinese";
Console.WriteLine("\nAltering Clone deep state: prototype affected * ****");
Console.WriteLine("Prototype\t{0}\nClone\t\t{1}", manager.Prototypes["Australia"], c2);

c3 = manager.Prototypes["Germany"].DeepCopy();
Console.WriteLine("\nDeep cloning Germany\n ============ ");
Console.WriteLine("Prototype\t{0}\nClone\t\t{1}", manager.Prototypes["Germany"], c3);

c3.Capital = "Munich";
Console.WriteLine("\nAltering Clone shallow state, prototype unaffected");
Console.WriteLine("Prototype\t{0}\nClone\t\t{1}", manager.Prototypes["Germany"], c3);

c3.Language.Data = "Turkish";
Console.WriteLine("\nAltering Clone deep state, prototype unaffected");
Console.WriteLine("Prototype\t{0}\nClone\t\t{1}", manager.Prototypes["Germany"], c3);