原型(Prototype)
概念
原型模式是一種建立型模式,概念是透過複製(clone)物件的方式來減少重新建構物件所帶來的成本。而複製物件在C#是很容易的事情,只要繼承ICloneable並實作Clone()方法即可。
另外複製物件有分為兩種淺層複製(Shallow Copy)與深層複製(Deep Copy)。兩者的差異是在Clone()的過程,參考型別在淺層複製時僅會複製物件的參考,深層複製才會完整複製物件;實值型別則都會複製。
所以如果物件內有包含其他Class的要用深層;只有實值型別則可以考慮用淺層即可。
範例
//**************
//* author: cian
//* 20231022
//**************
class MyClass : ICloneable
{
private int A = 0;
private string B = "bbbbbb";
//參考型別需要另外複製,否則複製後的物件內成員仍是相同參考
private SubClass C = new SubClass();
public object Clone() //Deep Copy
{
//淺層複製
MyClass obj = (MyClass) this.MemberwiseClone();
//完整複製參考型別
obj.C = (SubClass) this.C.Clone();
return other;
}
}
class SubClass : ICloneable
{
private int A = 100;
private string B = "bbb";
public object Clone() //Shallow Copy
{
return this.MemberwiseClone();
}
}
結語
深層複製在C#其實有萬用方法可以完整複製物件,不需要考慮內部的型別,也不用挨著每個成員去複製,但在這主要是區分兩種複製的差別,就還是以土法煉鋼來完成。
以上為學習過程的紀錄
如果文章有誤,歡迎前輩留言請不吝指教。
發佈留言