用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 原型模式类似于细胞分裂,细胞在一定条件下,由一个分裂成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的;