9.原型模式(Prototype): 用原型实例指定创建对象的种类,并通过拷贝这些原型创建行的对象。
UML图:
原型模式其实就是从一个对象创建另一个可定制的对象,并且不需要知道任何创建的细节。
.NET 中实现ICloneable接口即可。
一般在初始化信息不发生变化的情况下,克隆是最好的办法,隐藏了对象创建的细节,又提高了性能。
MemberwiseClone()方法,如果字段是值类型,对该字段进行逐位复制;如果是引用类型,复制引用但是不复制引用的对象,因此原始对象及产生的副本引用同一对象。
浅复制,被复制出来的对象的所有的变量都与原来的对象有相同的值,而所有对其他对象的引用,都任然执行原来的值。
但是要注意string类型的特殊性,字符串的不可变性,浅复制后其实就相当于新建了,因为若对其赋值,不会改变原有的对象的指向,而是新建了一个字符串对象。