目的
可以定義原型個體生成的物件類型,爾後只要複製此原型即可生成物件
別名
Clone
範例
參與者
- Prototype – 宣告自我複製的介面
- ConcretePrototype – 具體實作並實現自我複製的操作
- Client – 呼叫複製,請求產生新的物件
許多物件導向語言已經實作了 Clone 的能力,如 C# 的 ICloneable 與 MemberwiseClone
這邊屬於淺層複製(Shallow Copy)即數值類直接複製,但如果是內部物件,則直接引用。連同內部的物件也一同複製則稱為深層複製(Deep Copy)。
舉例來說 p2 修改 Name 後並不會影響原本的 p1 :
但如果定義一個物件,如 Class 或 List
此時 Items 會變成共用
所以要小心,避免如金錢道具發生錯亂情況,如果要深層複製也只能手動去刻 :