예제 #1
0
        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");
 }