一、應用場景
在一個特定的場景中經常需要出現多個相同但狀態各異的對象,通常的解決方法是通過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="大卡車";
}