一、应用场景
在一个特定的场景中经常需要出现多个相同但状态各异的对象,通常的解决方法是通过new创建这些对象之后分别去设置这些对象的状态。原型设计模式提供了更快捷、更有效的解决方法。
二、意图
通过复制(克隆、拷贝)一个指定类型的对象来创建更多同类型的对象。这个指定的对象可被称为“原型”对象,也就是通过复制原型对象来得到更多同类型的对象。
三、说明
原型设计模式的拷贝可以被分为深拷贝与浅拷贝。
深拷贝是指复制后的对象同原型对象不共享任何数据。如对象A内的一个引用字段,它同复制对象B内的相同引用字段不引用相同的对象,而是为对象B创建一个新的引用对象。
浅拷贝不同于深拷贝,它的原型内的引用字段同复制对象内的引用字段,引用的是同一个对象。
C#中的拷贝可以使用Object类的成员MemberwiseClone进行浅拷贝,可以使用BinaryFormatter.Serialized成员串行化技术来进行深度拷贝。
C++中的拷贝直接使用类中的复制构造函数进行拷贝。
四、例子
public Interface Car
{
string CarName{get;set;}
Car Clone();
}
public class NewCar:Car
{
private string m_carName;
public string CarName
{
get
{
return m_carName;
}
set
{
m_carName=value;
}
}
public override Car Clone()
{
拷贝代码
}
}
void Main()
{
Car car1=new NewCar();
car1.CarName="小汽车";
Car car2=car1.Clone();
car2.CarName="大卡车";
}