>>回傳《C#常用設計模式》
- 1. 簡介
- 2. 示例
- 3. 優缺點
- 3.1. 優點
- 3.2. 缺點
- 3.3. 原型模式的適用環境
1. 簡介
- 定義
- 使用原型實體指定待創建物件的型別,并且通過復制這個原型來創建新的物件,
- 使用場景
- 頻繁創建“結構復雜的物件”
- 注意,克隆的物件是全新的物件,而且是獨立的
2. 示例
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
GameSys sys = new GameSys();
sys.Run(new NormalActorA(), new FlyActorA(), new WaterActorA());
}
}
public class GameSys
{
public void Run(NormalActor normalActor, FlyActor flyActor, WaterActor waterActor)
{
NormalActor nActor1 = normalActor.Clone();
NormalActor nActor2 = normalActor.Clone();
NormalActor nActor3 = normalActor.Clone();
FlyActor fActor1 = flyActor.Clone();
FlyActor fActor2 = flyActor.Clone();
WaterActor wActor1 = waterActor.Clone();
}
}
#region 抽象類
public abstract class NormalActor
{
public abstract NormalActor Clone();
}
public abstract class FlyActor
{
public abstract FlyActor Clone();
}
public abstract class WaterActor
{
public abstract WaterActor Clone();
}
#endregion
#region 具體實作
public class NormalActorA : NormalActor
{
public override NormalActor Clone()
{
//被拷貝物件成員不存在參考物件時使用,如果存在參考物件那么使用“深拷貝”
return (NormalActor)this.MemberwiseClone();
}
}
public class FlyActorA : FlyActor
{
public override FlyActor Clone()
{
return (FlyActor)this.MemberwiseClone();
}
}
public class WaterActorA : WaterActor
{
public override WaterActor Clone()
{
return (WaterActor)this.MemberwiseClone();
}
}
#endregion
}
3. 優缺點
3.1. 優點
- 簡化物件的創建程序,通過復制一個已有物件實體可以提高新實體的創建效率
- 擴展性好
- 提供了簡化的創建結構,原型模式中的產品的復制是通過封裝在原型類中的克隆方法實作的,無需專門的工廠類來創建產品
- 可以通過深克隆的方式保存物件的狀態,使用原型模式將物件復制一份并其狀態保存起來,以便在需要的時候使用,可輔助實作撤銷操作
3.2. 缺點
- 需要為每一個類準備一個克隆方法,而且該克隆方法位于一個類的內部,當對已有類進行改造時,需要修改原代碼,違背了開閉原則
- 在實作深克隆時需要寫較復雜的代碼,而且當物件之間存在多重的嵌套參考時,為了實作深克隆,每一層物件對應的類必須支持深克隆,實作起來較繁瑣
3.3. 原型模式的適用環境
- 創建新物件成本較大,新物件可以通過復制已有物件來獲得,如果是相似物件,則可以對其成員變數修改
- 系統要保存物件的狀態,而物件的狀態變化很小
- 需要避免使用分層次的工廠類來創建分層次的物件,并且類的實體物件只有一個或很少的幾個組合狀態,通過復制原型物件得到新實體可能比使用建構式創建一個新實體更方便
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/259954.html
標籤:其他
上一篇:Adapter配接器模式
下一篇:Adapter配接器模式
