Prototype原型模式

2019-08-27  本文已影响0人  _sands
  public class PrototypeTest
    {
        public static void Test()
        {
            //如果不用克隆
            {
                Product product = new Product();
                product.Name = "cpu";

                Product copy = product;
                copy.Name = "memory";

                Console.WriteLine(product.Name);
                Console.WriteLine(copy.Name);
            }
            //用克隆
            {
                Product product = new Product();
                product.Name = "cpu";

                Product copy = product.Clone() as Product;
                copy.Name = "memory";
                Console.WriteLine(product.Name);
                Console.WriteLine(copy.Name);
            }


        }

        /// <summary>
        /// 支持克隆,将创建具有相同值的类的新实例
        /// </summary>
        public class Product : ICloneable
        {
            public string Name { get; set; }

            public object Clone()
            {
                return new Product
                {
                    Name = this.Name,
                };
            }
        }
    }

看结果


image.png

由于对象赋值是地址引用;所有改copy的值就是在改product的值;
如果使用clone()之后,会重新创建新的对象实例,虽然值是一样的但是改动copy是不会影响product的;

上一篇下一篇

猜你喜欢

热点阅读