- 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
- 原型模式类似于细胞分裂,细胞在一定条件下,由一个分裂成2个,再由2个分裂成4个……,这个原始的细胞决定了分裂出来的细胞的组成结构。
-
Prototype类中包括一个clone方法,Client调用其拷贝方法clone即可得到实例,不需要手工去创建实例。
image.png
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的;
网友评论