設計模式(Design Pattern) – Prototype(原型)


目的

可以定義原型個體生成的物件類型,爾後只要複製此原型即可生成物件


別名

Clone


範例

參與者

  • Prototype – 宣告自我複製的介面
  • ConcretePrototype – 具體實作並實現自我複製的操作
  • Client – 呼叫複製,請求產生新的物件

 


許多物件導向語言已經實作了 Clone 的能力,如 C# 的 ICloneable 與 MemberwiseClone

這邊屬於淺層複製(Shallow Copy)即數值類直接複製,但如果是內部物件,則直接引用。連同內部的物件也一同複製則稱為深層複製(Deep Copy)

舉例來說 p2 修改 Name 後並不會影響原本的 p1 :

但如果定義一個物件,如 Class 或 List

此時 Items 會變成共用

 

所以要小心,避免如金錢道具發生錯亂情況,如果要深層複製也只能手動去刻 : 

print

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *