原型模式(Prototype Pattern)
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,就可以可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式,简称原型模式。
结构图:
角色:
- 原型对象(prototype):需要进行复制的对象。
适用场景:
- 需要基于现有的对象信息进行处理。
- 初始化类数据需要消费非常多的资源时。
优点:
- 可以快速复制原型对象,避免反复运行初始化代码。
- 基于原型可以方便地生成复杂对象。
缺点:
- 如果原型过于复杂会导致复制代码过于繁琐。
代码(C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| public interface ICopy<T> { T ShallowCopy(); T DeepCopy(); }
public class Cat : ICopy<Cat> { public int age; public string Name; public string Variety;
public Cat ShallowCopy() { return (Cat)MemberwiseClone(); }
public Cat DeepCopy() { var clone = (Cat)MemberwiseClone(); ; clone.Variety = new string(Name); clone.Name = new string(Name); return clone; } }
var cat1 = new Cat(); ICopy<Cat> copy = cat1; cat1.age = 3; cat1.Name = "77"; cat1.Variety = "银渐层"; var cat2 = copy.ShallowCopy();
var cat3 = copy.DeepCopy();
|
最后
深拷贝和浅拷贝。浅拷贝只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象……而深拷贝得到的是一份完完全全独立的对象。所以,深拷贝比起浅拷贝来说,更加耗时,更加耗内存空间。