iT邦幫忙

第 12 屆 iThome 鐵人賽

1

本文同步更新於blog

Prototype Pattern

當創建實例的過程很昂貴或複雜時,透過拷貝這些原型來建立新的實例。


原型模式中會將類別分為兩類:
分別是原型介面 (Prototype)具體原型類別 (Concrete Prototype)

透過原型介面,我們可以知道該實例能拷貝 (clone),複製出自己的實例。


其中拷貝又可分為兩種:
分別是淺複製 (Shallow Copy)深複製 (Deep Copy)

兩者的差別在於,當原型類別的屬性為參考類型 (references) 時,
淺複製會指向與實例一樣的位址,不會重新創建屬性
深複製則會重新創建屬性

這意味著,當使用淺複製時,
修改參考類型的屬性會一併修改到原本實例。


優點
可以直接拷貝實例,省去創建的麻煩。
也提供了一個不使用繼承 (extend) 來面對複雜實例的方式。

缺點
當架構較為複雜時,深複製可能會不好實作。


與其他模式的比較:

[抽象工廠模式]:
抽象工廠模式,透過定義產品族的概念,處理複雜的創建。
原型模式則是想利用拷貝的概念,來處理複雜的創建。

[單例模式]:
單例模式保證同一時間存在一個實例
原型模式則是複製出一個實例。

ʕ •ᴥ•ʔ:在PHP中,由於有魔術方法__clone()的存在,
我們可以不定義原型介面,直接使用clone()。


上一篇
Day36. 範例:快取代理(代理模式)
下一篇
Day38. 範例:三隻小豬 (原型模式)
系列文
你終究都要學設計模式的,那為什麼不一開始就學呢?57
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言