1、前言
有時候會出現這樣一個問題,細胞分裂,一般來說一個細胞就是一個類,分裂的時候我們只能new一個一個的出來,在這個數量相當大的情況下是不是感覺Crazy,咦,這時候你有必要了解一下原型模式,
2、定義
當程式中確定了所需要的通用類(細胞),但需要將具體類延遲到運行時才能確定,當你需要的類盡在他們的提供處理方式不一樣的時候原型模式就是很好的選擇,使用原型模式就不用new細胞類了我們可以通過克隆Clon來實作,克隆不是C#固有的屬性但是這依舊不能阻止你玩成這樣的操作,下面來看列子
/// <summary> /// kelong /// </summary> public abstract class CellsClon { public abstract object Clone(); } /// <summary> /// 細胞類 /// </summary> public class Cells:CellsClon { /// <summary> /// 姓名 /// </summary> public string ? Name { get; set; } /// <summary> /// 編碼 /// </summary> public string? Code { get; set; }=Guid.NewGuid().ToString(); /// <summary> /// 克隆方法 /// </summary> /// <returns></returns> public override object Clone() { return this.MemberwiseClone() ; } //呼叫 Cells cc = new(); cc.Name = "紅細胞——————————————————————"; var cc2 = cc.Clone() as Cells; Console.WriteLine(cc.Name+cc.Code); Console.WriteLine(cc2.Name+cc2.Code);

上面原型模式的運行結果為(從運行結果可以看出,創建的兩個拷貝物件的Code屬性都是與原型物件Code屬性一樣的),上面代碼實作的淺拷貝的方式,淺拷貝是指當物件的欄位值被拷貝時,欄位參考的物件不會被拷貝,例如,如果一個物件有一個指向字串的欄位,并且我們對該物件做了一個淺拷貝,那么這兩個物件將參考同一個字串,而深拷貝是對物件實體中欄位參考的物件也進行拷貝,如果一個物件有一個指向字串的欄位,并且我們對該物件進行了深拷貝的話,那么我們將創建一個物件和一個新的字串,新的物件將參考新的字串,也就是說,執行深拷貝創建的新物件和原來物件不會共享任何東西,改變一個物件對另外一個物件沒有任何影響,而執行淺拷貝創建的新物件與原來物件共享成員,改變一個物件,另外一個物件的成員也會改變,
原型模式的優點有:
- 原型模式向客戶隱藏了創建新實體的復雜性
- 原型模式允許動態增加或較少產品類,
- 原型模式簡化了實體的創建結構,工廠方法模式需要有一個與產品類等級結構相同的等級結構,而原型模式不需要這樣,
- 產品類不需要事先確定產品的等級結構,因為原型模式適用于任何的等級結構
原型模式的缺點有:
- 每個類必須配備一個克隆方法
- 配備克隆方法需要對類的功能進行通盤考慮,這對于全新的類不是很難,但對于已有的類不一定很容易,特別當一個類參考不支持串行化的間接物件,或者參考含有回圈結構的時候,
PS:清晨的雨露拍打著花瓣的額頭,不禁讓人低下頭輕嗅它的清香,遠遠望去,窗臺的茉莉花又回到了屬于它的往昔,花香彌漫,婀娜妖嬈,城墻上參差的綠色也慢慢爬上了眉梢,
著作權宣告:本文為 魏楊楊 原創文章并發布到博客園, 除了【萬仟網】外, 其他平臺歡迎轉載,但必須在文章頁面明顯位置寫明作者和出處,非常感謝,技術交流QQ群 99210270

微信掃一掃關注我公眾號
一起學習,一起進步

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/380837.html
標籤:其他
下一篇:Rails有很多通過有一個多型
