static void Main(string[] args) { // Простое создание клона вручную Prototype prototypeA = new ConcretePrototypeA("Prototype A"); Prototype clone1 = prototypeA.Clone(); Console.WriteLine(prototypeA.Name); Console.WriteLine(clone1.Name); // Продвинутое создание клона, так же с клонированием ссылочных типов Dependency dependency = new Dependency("Dependency A1"); CloneablePrototypeAdvanced cloneablePrototype = new CloneablePrototypeAdvanced("Clone", dependency); CloneablePrototypeAdvanced clone2 = cloneablePrototype.Clone() as CloneablePrototypeAdvanced; // Убедимся, что после клонирования, при изменении dependency, ссылочный тип клона не изменится dependency.SetText("Dependency A2"); Console.WriteLine(cloneablePrototype.GetDependencyText()); Console.WriteLine(clone2.GetDependencyText()); // Реализация через фабрику ConcretePrototypeN prototypeN = PrototypeFactory.CreatePrototypeN(); Prototype clone3 = prototypeN.Clone(); Console.WriteLine(prototypeN.Name); Console.WriteLine(clone3.Name); Console.ReadLine(); }
static PrototypeFactory() { _concretePrototypeA = new ConcretePrototypeA("Prototype A"); _concretePrototypeB = new ConcretePrototypeB("Prototype B"); _concretePrototypeN = new ConcretePrototypeN("Prototype N"); }