設計模式系列
定義:用原型的實例來指定創建的對象種類,並通過複製這些原型創造新的對象
啥咪???...你工啥咪挖溝,哇聽某啦...
簡單來說....圍繞的點就是"複製",這個複製是原型模式的精隨
那我們進一步解說為什麼要用原型模式...使用原型模式是在於能夠創造對象
使用原型模式的時機:
1.有時候對象類型一開始沒辦法確定,在這類型在執行的時候確認,使用Clone出
一個對象比較容易些
2.某些情境,我們需要對象當中的副本,使用原型模式是最佳的狀況
那上述各位就會有一個疑問了??? 那為什麼不用new 一個對象勒???
A:因為 new 一個對象時候...其一不能獲取目前對象的狀態,其二就算複製目前的對象
效率不如原型模式,其三在使用原型模式的時候,將原來的對象複製一個出來,這
個對象就跟目前的對象是完全一致了。
廢話不多說,來DEMO一下原型模式範例
class Program
{
static void Main(string[] args)
{
ConcretePrototype1 p1 = new ConcretePrototype1("I");
ConcretePrototype1 c1 = (ConcretePrototype1) p1.Clone();
Console.WriteLine($"Cloned:{c1.Id}");
ConcretePrototype2 p2 = new ConcretePrototype2("II");
ConcretePrototype2 c2 = (ConcretePrototype2) p2.Clone();
Console.WriteLine($"Cloned:{c2.Id}");
Console.ReadKey();
}
}
abstract class Prototype
{
private readonly string _id;
protected Prototype(string id)
{
_id = id;
}
public string Id
{
get { return _id; }
}
public abstract Prototype Clone();
}
class ConcretePrototype1:Prototype
{
public ConcretePrototype1(string id) : base(id)
{
}
public override Prototype Clone()
{
return (Prototype) this.MemberwiseClone();
}
}
class ConcretePrototype2:Prototype
{
public ConcretePrototype2(string id) : base(id)
{
}
public override Prototype Clone()
{
return (Prototype) this.MemberwiseClone();
}
}
優點:
1.效能不錯,比直接NEW一個物件好多,尤其是產生大量物件的時候,就可以體現出優點...
2.原型模式簡單化創造結構
缺點:
1.每個類別都要配置一個Clone Method...
2.搭配Clone Method的對應功能必須通盤考慮,對全新類別不太難,對既有類別不容易,
且容易違反OCP原則...
元哥的筆記