有时候会出现这样一个问题,细胞分裂,一般来说一个细胞就是一个类。分裂的时候我们只能new一个一个的出来,在这个数量相当大的情况下是不是感觉Crazy。咦,这时候你有必要了解一下原型模式。
当程序中确定了所需要的通用类(细胞),但需要将具体类延迟到运行时才能确定,当你需要的类尽在他们的提供处理方式不一样的时候原型模式就是很好的选择。使用原型模式就不用new细胞类了我们可以通过克隆Clon来实现。克隆不是C#固有的属性但是这依旧不能阻止你玩成这样的操作。下面来看列子
/// <summary> /// kelong /// </summary> public abstract class CellsClon { public abstract object Clone(); } /// <summary> /// 细胞类 /// </summary> public class Cells:CellsClon { /// <summary> /// 姓名 /// </summary> public string ? Name { get; set; } /// <summary> /// 编码 /// </summary> public string? Code { get; set; }=Guid.NewGuid().ToString(); /// <summary> /// 克隆方法 /// </summary> /// <returns></returns> public override object Clone() { return this.MemberwiseClone() ; } //调用 Cells cc = new(); cc.Name = "红细胞——————————————————————"; var cc2 = cc.Clone() as Cells; Console.WriteLine(cc.Name+cc.Code); Console.WriteLine(cc2.Name+cc2.Code);
上面原型模式的运行结果为(从运行结果可以看出,创建的两个拷贝对象的Code属性都是与原型对象Code属性一样的)。上面代码实现的浅拷贝的方式,浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝。例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅拷贝,那么这两个对象将引用同一个字符串,而深拷贝是对对象实例中字段引用的对象也进行拷贝,如果一个对象有一个指向字符串的字段,并且我们对该对象进行了深拷贝的话,那么我们将创建一个对象和一个新的字符串,新的对象将引用新的字符串。也就是说,执行深拷贝创建的新对象和原来对象不会共享任何东西,改变一个对象对另外一个对象没有任何影响,而执行浅拷贝创建的新对象与原来对象共享成员,改变一个对象,另外一个对象的成员也会改变。
原型模式的优点有:
原型模式的缺点有:
PS:清晨的雨露拍打着花瓣的额头,不禁让人低下头轻嗅它的清香。远远望去,窗台的茉莉花又回到了属于它的往昔,花香弥漫,婀娜妖娆。城墙上参差的绿色也慢慢爬上了眉梢。