程式碼執行結果

代碼角色說明
- Enemy:抽象原型,定義共同屬性與
Clone() 介面
- FootMan:具體原型,實作具體參數與克隆邏輯
- GameScene:Client,透過複製原型建立敵人群組,零依賴具體類別
核心機制解析
- Clone(bool isDeepCopy):參數控制拷貝深度
- 深拷貝實作:
BinaryFormatter + MemoryStream 序列化/反序列化,確保 Location 等參考型別獨立副本
- 效能優勢:建構函式
Thread.Sleep(1000) 模擬昂貴初始化,三個敵人僅耗費一次建構時間
- 獨立性驗證:修改單一敵人位置不影響其他實例
深拷貝程式碼片段
public override Enemy Clone(bool isDeepCopy)
{
FootMan footman;
if (isDeepCopy)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, this);
ms.Position = 0;
footman = (FootMan)formatter.Deserialize(ms);
}
else
footman = (FootMan)this.MemberwiseClone();
return footman;
}
執行流程驗證
- 建立原型
FootMan(5, 4, new Location(100,200)) — 耗時 1000ms
- Clone 三次建立小隊:兩側步兵 + 一精英(屬性翻倍)
- 總耗時約 1000ms(非 3000ms),證明避免重複初始化
- 深拷貝確保三個實例
Location 獨立,互不干擾