Пример #1
0
        public IPrototype DoDeepCopy()
        {
            ConcretePrototype clone = this.MemberwiseClone() as ConcretePrototype;

            clone.Name = new string(Name);
            return(clone);
        }
Пример #2
0
        public override Prototype Clone()
        {
            ConcretePrototype concretePrototype = new ConcretePrototype();

            concretePrototype.Attr = attr;
            Console.WriteLine("我被克隆了!!!");
            return(concretePrototype);
        }
Пример #3
0
        static void Main(string[] args)
        {
            var prototype = new ConcretePrototype(1000);

            for (int i = 1; i < 1000; i++)
            {
                ConcretePrototype tempotype = prototype.Clone() as ConcretePrototype;
                tempotype.X *= i;
            }
        }
Пример #4
0
        static void Main(string[] args)
        {
            ConcretePrototype concrete1 = new ConcretePrototype("0");

            Console.WriteLine(concrete1.Id);

            ConcretePrototype clone1 = (ConcretePrototype)concrete1.Clone();

            Console.WriteLine(clone1.Id);

            Console.ReadLine();
        }
Пример #5
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            ConcretePrototype concretePrototype = new ConcretePrototype();

            concretePrototype.Name  = "Name";
            concretePrototype.Value = 10;

            ConcretePrototype shallowCopy = concretePrototype.DoShallowCopy() as ConcretePrototype;
            ConcretePrototype deepCopy    = concretePrototype.DoDeepCopy() as ConcretePrototype;
        }
Пример #6
0
        static void Main(string[] args)
        {
            //母細胞(第一個細胞)
            CellPrototype cell = new ConcretePrototype("Mother");

            //複製第一個
            CellPrototype clone1 = cell.Clone();

            Console.WriteLine("Cloned1:\t" + clone1.id);

            //複製第二個
            CellPrototype clone2 = cell.Clone();

            Console.WriteLine("Cloned2:\t" + clone2.id);

            Console.ReadLine();
        }
Пример #7
0
        static void Main(string[] args)
        {
            MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing");

            // 变一个
            MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype;

            if (cloneMonkeyKing != null)
            {
                Console.WriteLine("Cloned1:\t" + cloneMonkeyKing.Id);
            }

            // 变两个
            MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype;

            if (cloneMonkeyKing2 != null)
            {
                Console.WriteLine("Cloned2:\t" + cloneMonkeyKing2.Id);
            }
            Console.ReadLine();
        }
Пример #8
0
        static void Main(string[] args)
        {
            {
                ConcretePrototype no0 = new ConcretePrototype()
                {
                    Number = 0, Person = new Person()
                    {
                        Age = 17, Name = "Vincent"
                    }
                };
                Console.WriteLine("第一次构造");
                Console.WriteLine($"No0:Number:{no0.Number},Age:{no0.Person.Age},Name:{no0.Person.Name}");

                Console.WriteLine("从No0浅克隆到No1");
                ConcretePrototype no1 = (ConcretePrototype)no0.Clone();

                Console.WriteLine("修改No1");
                no1.Person.Age  = 18;
                no1.Person.Name = "Vincent1";
                Console.WriteLine($"No0:Number:{no0.Number},Age:{no0.Person.Age},Name:{no0.Person.Name}");
                Console.WriteLine($"No1:Number:{no1.Number},Age:{no1.Person.Age},Name:{no1.Person.Name}");
                Console.WriteLine("******************");

                Console.WriteLine("从No0浅克隆到No2");
                ConcretePrototype no2 = (ConcretePrototype)no0.DeepClone();
                Console.WriteLine("修改No2");
                no2.Person.Age  = 19;
                no2.Person.Name = "Vincent2";
                Console.WriteLine($"No0:Number:{no0.Number},Age:{no0.Person.Age},Name:{no0.Person.Name}");
                Console.WriteLine($"No2:Number:{no2.Number},Age:{no2.Person.Age},Name:{no2.Person.Name}");
                Console.WriteLine("******************");
            }
            Console.WriteLine("————————————————————————————————————————");
            {
                ConcretePrototype2 no0 = new ConcretePrototype2()
                {
                    Number = 0, Person = new Person()
                    {
                        Age = 17, Name = "Vincent"
                    }
                };
                Console.WriteLine("第一次构造");
                Console.WriteLine($"No0:Number:{no0.Number},Age:{no0.Person.Age},Name:{no0.Person.Name}");

                Console.WriteLine("从No0浅克隆到No1");
                ConcretePrototype2 no1 = (ConcretePrototype2)no0.Clone();

                Console.WriteLine("修改No1");
                no1.Person.Age  = 18;
                no1.Person.Name = "Vincent1";
                Console.WriteLine($"No0:Number:{no0.Number},Age:{no0.Person.Age},Name:{no0.Person.Name}");
                Console.WriteLine($"No1:Number:{no1.Number},Age:{no1.Person.Age},Name:{no1.Person.Name}");
                Console.WriteLine("******************");

                Console.WriteLine("从No0浅克隆到No2");
                ConcretePrototype2 no2 = no0.DeepClone <ConcretePrototype2>();
                Console.WriteLine("修改No2");
                no2.Person.Age  = 19;
                no2.Person.Name = "Vincent2";
                Console.WriteLine($"No0:Number:{no0.Number},Age:{no0.Person.Age},Name:{no0.Person.Name}");
                Console.WriteLine($"No2:Number:{no2.Number},Age:{no2.Person.Age},Name:{no2.Person.Name}");
                Console.WriteLine("******************");
            }

            Console.ReadKey();
        }
Пример #9
0
 public override Prototype Clone()
 {
     var prototype = new ConcretePrototype();
     prototype.ConcreteList = ConcreteList.ToList();
     return prototype;
 }