引言
原型模式是一種創(chuàng)建型設(shè)計模式,它允許我們創(chuàng)建一個對象的副本,而不需要顯式地使用構(gòu)造函數(shù)來創(chuàng)建一個新的對象。這種模式通常用于創(chuàng)建那些具有復(fù)雜創(chuàng)建過程或需要大量資源的對象。
在原型模式中,我們首先定義一個原型接口,該接口包含一個克隆方法。然后我們創(chuàng)建一個原型對象,該對象實現(xiàn)了原型接口并提供了自己的克隆方法。最后,我們可以使用原型對象的克隆方法來創(chuàng)建新的對象,而無需重新實例化原型對象。
IClone接口
需要定義一個IClone
接口。這個類中應(yīng)該包含一個 Clone
方法,用于克隆自身。
public interface IClone<T> where T : class
{
public T Clone();
}
原型類
定義一個具體原型類,它實現(xiàn)IClone
接口,并實現(xiàn)了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}");
}
}
在具體原型類中,我們實現(xiàn)了 Clone
方法,并使用了 MemberwiseClone
方法來復(fù)制對象。此外,我們還添加了一個 SetName
方法和一個 PrintName
方法,用于演示對象的復(fù)制和修改。
:::tip{title="提示"}
- 使用
Clone
方法來復(fù)制對象。需要注意的是,在復(fù)制對象時,我們需要使用MemberwiseClone
方法或其他深拷貝方法來復(fù)制對象本身,而不是復(fù)制它的引用。此外,如果需要復(fù)制對象的引用類型成員,我們需要在具體原型類中對它們進(jìn)行深拷貝。 - 原型模式是在內(nèi)存二進(jìn)制流的拷貝,要比直接
new
一個對象性能好很多,特別是要在一個循環(huán)體內(nèi)產(chǎn)生大量的對象時,原型模式可以更好地體現(xiàn)其優(yōu)點。 - 執(zhí)行
Clone
方法復(fù)制對象時,不執(zhí)行其構(gòu)造函數(shù)。
:::
接下來,我們可以使用具體原型類來創(chuàng)建新的對象。具體地說,我們可以先創(chuàng)建一個原型對象,然后調(diào)用它的 Clone 方法來復(fù)制它,并修改復(fù)制出的對象的狀態(tài)。
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
在這段代碼中,我們首先創(chuàng)建了一個名為 prototype
的具體原型對象,并輸出它的名字。然后,我們調(diào)用了 prototype
的 Clone
方法來復(fù)制它,并將結(jié)果保存在名為 clone
的變量中。接著,我們修改了 clone
的名字為 "clone",并分別輸出 prototype
和 clone
的名字,以證明它們是不同的對象。文章來源:http://www.zghlxwxcb.cn/news/detail-541867.html
總結(jié)
原型模式適用于以下情況:文章來源地址http://www.zghlxwxcb.cn/news/detail-541867.html
- 當(dāng)需要創(chuàng)建的對象的類型由程序在運行時確定時,原型模式比工廠模式更加靈活。
- 當(dāng)需要創(chuàng)建的對象的創(chuàng)建過程較為復(fù)雜,或者需要初始化較長時間時,原型模式可以避免重復(fù)創(chuàng)建對象的開銷。
- 當(dāng)需要創(chuàng)建的對象與其它對象具有相似的屬性和方法時,原型模式可以避免重復(fù)編寫相同的代碼。
到了這里,關(guān)于重溫設(shè)計模式 --- 原型模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!