首頁 » 設計模式 » 原型(Prototype)

原型(Prototype)

作者:

分類:

原型(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#其實有萬用方法可以完整複製物件,不需要考慮內部的型別,也不用挨著每個成員去複製,但在這主要是區分兩種複製的差別,就還是以土法煉鋼來完成。

以上為學習過程的紀錄
如果文章有誤,歡迎前輩留言請不吝指教。

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *