当前位置 : 主页 > 大数据 > 区块链 >

Prototype原型模式

来源:互联网 收集:自由互联 发布时间:2021-06-22
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 原型模式类似于细胞分裂,细胞在一定条件下,由一个分裂成2个,再由2个分裂成4个……,这个原始的细胞决
  • 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
  • 原型模式类似于细胞分裂,细胞在一定条件下,由一个分裂成2个,再由2个分裂成4个……,这个原始的细胞决定了分裂出来的细胞的组成结构。
  • Prototype类中包括一个clone方法,Client调用其拷贝方法clone即可得到实例,不需要手工去创建实例。
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,
                };
            }
        }
    }

看结果

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

网友评论