前言
在軟體系統中,經常會遇到這樣的需求:需要大量建立結構類似但內容或狀態不同的物件,或是建立新物件的成本較高 (如初始化相當繁雜、耗時或需查詢外部資源)。如果每次都用 new 關鍵字從頭建立,既耗費資源,也不夠靈活。傳統的工廠方法雖然可以統一建立流程,但當物件型別繁多、結構複雜時,仍然難以應對動態變化的需求。
我們需要一種更有效的機制,能夠基於現有物件創建新物件,同時保留原有物件的結構和數據,並允許根據需要進行適當修改。這種機制應該能夠隱藏物件創建的複雜性,同時提供足夠的靈活性來定制新物件。
原型模式的核心價值在於,它提供了一種通過複製現有物件來創建新物件的方法,避免了重新初始化的成本和複雜性。這就像是生物學中的細胞分裂過程,新細胞繼承了原始細胞的所有特性,但可以獨立發展。

以三國時期諸葛亮發明的「木牛流馬」為例,諸葛亮先設計出標準原型,再依此批量製造相同結構的運輸工具。這種「一次設計、批量複製」的方法,避免了重複設計的成本,正體現了原型模式「以原型為基礎快速複製」的核心思想。
木牛流馬量造運糧草 – 原型模式
「孔明曰:『吾已令人依法制造,尚未完備。吾今先將造木牛流馬之法,尺寸方圓,長短闊狹,開寫明白,汝等視之。』眾大喜。」
……
「木牛者,方腹曲頭,一尾四足,頭入領中,舌著於腹。載多而行,少則否,宜可大用,不可小使。」
……
卻說諸葛亮在蜀中大造木牛流馬,以運糧草。其狀如牛,能載一石,日行十里;馬能載五斗,日行二十里。皆以木為之,能自動行走,甚為奇妙。孔明令右將軍高翔,引一千兵駕著木牛流馬,自劍閣直抵祁山大寨,往來搬運糧草,供給蜀兵之用。後人有詩讚曰:劍關險峻驅流馬,斜谷崎嶇駕木牛。後世若能行此法,輸將安然不見愁。

在諸葛亮北伐期間,蜀軍面臨糧草供應的挑戰。為了解決這一問題,諸葛亮發明了木牛流馬,這是一種以木製成的自動運輸工具。它不僅能有效運送糧草,還能適應險峻地形,顯示了諸葛亮的創造力和智慧。
諸葛亮設計「木牛流馬」時,首先制定了標準的製造規格 (「尺寸方圓,長短闊狹」),然後依照這個原型設計快速複製大量相同的運輸工具。此場景正對應了 Prototype 模式的核心概念:建立一個原型物件作為範本,然後透過複製 (clone) 的方式快速產生多個相同結構的物件實例,避免重複的初始化過程。
下圖使用UML類別圖表達了木牛流馬適用Prototype模式的結構關係。

主要結構元素
- TransportClonable (Prototype Interface):宣告可以自我複製的操作介面。
- 木牛流馬 (concrete Prototype):具體原型,實作Prototype介面的Clone() 操作,複製自身,並回傳複本 (copy)。
Prototype 模式核心概念
原型模式是一種生成式 (creational) 設計模式,其目的是透過複製現有原型物件來建立新實例,而不必依賴類別的建構式。這種模式允許物件在執行期間動態建立,並根據原型進行個別化設定。
例如,在圖形編輯器中,可以將一個圖形物件作為原型,複製出多個新圖形,並根據需求調整屬性。這種方式不僅節省建立成本,也讓物件建立流程更具彈性。
原型模式的主要特點包括:
- 快速建立物件:可透過複製現有原型物件,快速建立新實例,無需每次都從頭初始化。
- 動態建立與調整:允許在執行時動態建立物件,並根據原型進行個別化設定。
- 隱藏創建的複雜性:複雜物件的建立過程可封裝於原型內,Client 只需複製即可。
- 避免類別依賴:不需依賴具體類別即可建立新物件,減少耦合。
原型模式特別適用於需要大量建立結構類似但內容不同物件的場景。例如,遊戲開發中的角色複製、圖形界面中的設計元素複製、文書編輯器中的內容複製等,都可以通過原型模式實現高效的物件創建。
通過原型模式,可以避免創建物件的複雜性以及隱藏物件型別的細節。為系統提供了一種更直觀、更高效的物件創建方式。