引言
原型模式是一種創建型設計模式,它允許我們創建一個物件的副本,而不需要顯式地使用建構式來創建一個新的物件,這種模式通常用于創建那些具有復雜創建程序或需要大量資源的物件,
在原型模式中,我們首先定義一個原型介面,該介面包含一個克隆方法,然后我們創建一個原型物件,該物件實作了原型介面并提供了自己的克隆方法,最后,我們可以使用原型物件的克隆方法來創建新的物件,而無需重新實體化原型物件,
IClone介面
需要定義一個IClone
介面,這個類中應該包含一個 Clone
方法,用于克隆自身,
public interface IClone<T> where T : class
{
public T Clone();
}
原型類
定義一個具體原型類,它實作IClone
介面,并實作了Clone
方法
public class ConcretePrototype : IClone<ConcretePrototype>
{
private string _name;
public ConcretePrototype(string name)
{
_name = name;
}
public ConcretePrototype Clone()
{
return (ConcretePrototype)this.MemberwiseClone();
}
public void SetName(string name)
{
_name = name;
}
public void PrintName()
{
Console.WriteLine($"Name: {_name}");
}
}
在具體原型類中,我們實作了 Clone
方法,并使用了 MemberwiseClone
方法來復制物件,此外,我們還添加了一個 SetName
方法和一個 PrintName
方法,用于演示物件的復制和修改,
:::tip{title="提示"}
- 使用
Clone
方法來復制物件,需要注意的是,在復制物件時,我們需要使用MemberwiseClone
方法或其他深拷貝方法來復制物件本身,而不是復制它的參考,此外,如果需要復制物件的參考型別成員,我們需要在具體原型類中對它們進行深拷貝, - 原型模式是在記憶體二進制流的拷貝,要比直接
new
一個物件性能好很多,特別是要在一個回圈體內產生大量的物件時,原型模式可以更好地體現其優點, - 執行
Clone
方法復制物件時,不執行其建構式,
:::
接下來,我們可以使用具體原型類來創建新的物件,具體地說,我們可以先創建一個原型物件,然后呼叫它的 Clone 方法來復制它,并修改復制出的物件的狀態,
ConcretePrototype prototype = new ConcretePrototype("prototype");
ConcretePrototype clone = (ConcretePrototype)prototype.Clone();
prototype.PrintName(); // Name: prototype
clone.PrintName(); // Name: prototype
clone.SetName("clone");
prototype.PrintName(); // Name: prototype
clone.PrintName(); // Name: clone
在這段代碼中,我們首先創建了一個名為 prototype
的具體原型物件,并輸出它的名字,然后,我們呼叫了 prototype
的 Clone
方法來復制它,并將結果保存在名為 clone
的變數中,接著,我們修改了 clone
的名字為 "clone",并分別輸出 prototype
和 clone
的名字,以證明它們是不同的物件,
總結
原型模式適用于以下情況:
- 當需要創建的物件的型別由程式在運行時確定時,原型模式比工廠模式更加靈活,
- 當需要創建的物件的創建程序較為復雜,或者需要初始化較長時間時,原型模式可以避免重復創建物件的開銷,
- 當需要創建的物件與其它物件具有相似的屬性和方法時,原型模式可以避免重復撰寫相同的代碼,
作者: Peter.Pan
出處: https://www.cnblogs.com/pandefu/>
關于作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控制元件庫,多執行緒
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出 原文鏈接,否則保留追究法律責任的權利, 如有問題, 可郵件咨詢,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/556983.html
標籤:其他
上一篇:重溫設計模式 --- 原型模式
下一篇:返回列表