2023-08-28|閱讀時間 ‧ 約 4 分鐘

Golang - Design Pattern #17: 原型模式 (Prototype)

raw-image
🔄 複製物件的方法 🔄

創建物件有時是一個資源密集型和耗時的過程,尤其是當涉及到從資料庫或其他來源初始化物件時。原型模式就是為了解決這種問題🔧,它提供了一種方法,能夠通過複製一個已存在的物件來迅速創建新物件,而不是從頭開始。


原型模式

原型模式是一種設計模式,允許你創建現有物件的複製,而不必擔心其具體的類型。這主要通過提供一個複製自身的方法來實現。

在Go語言中,我們可以使用組合和內嵌結構體來輕鬆實現原型模式。


例子

👩‍💻 使用者設定

假設我們有一個用於儲存使用者設定的結構體。當我們要為新用戶創建一個設定時,我們可以從一個預設設定開始,並進行修改。


type UserSettings struct {
Theme string
FontSize int
DefaultView string
}

// Clone method for UserSettings
func (us *UserSettings) Clone() *UserSettings {
return &UserSettings{
Theme: us.Theme,
FontSize: us.FontSize,
DefaultView: us.DefaultView,
}
}

// Usage
defaultSettings := &UserSettings{
Theme: "Light",
FontSize: 14,
DefaultView: "List",
}

newUserSettings := defaultSettings.Clone()
newUserSettings.Theme = "Dark"


🎮 遊戲角色

在一個遊戲中,可能有許多相似的角色。這些角色可能會有相似的屬性,但在遊戲中有輕微的差異。


type GameCharacter struct {
Name string
AttackPower int
DefensePower int
}

func (gc *GameCharacter) Clone() *GameCharacter {
return &GameCharacter{
Name: gc.Name,
AttackPower: gc.AttackPower,
DefensePower:gc.DefensePower,
}
}

// Usage
warrior := &GameCharacter{
Name: "Warrior",
AttackPower: 10,
DefensePower: 5,
}

cloneWarrior := warrior.Clone()
cloneWarrior.AttackPower = 12


小結

原型模式為你提供了一種快速和靈活的方式來複製和創建物件。這對於要重複使用物件的初始狀態,然後進行微小調整的場景特別有用,例如設定、遊戲角色或模板。但是,當使用原型模式時,一定要確保你正確地複製所有物件的內部狀態,以避免未預期的行為和錯誤!🌟

分享至
成為作者繼續創作的動力吧!
歡迎來到 Golang Lab!我們專注於提供深入的 Golang 學習體驗。透過系列文、實例項目和進階指南,探索從基礎到進階的開發技巧,包括正則表達式、併發程式設計、性能優化等。無論您是新手還是有經驗的開發者,我們都致力於協助您迅速掌握 Golang,並在實際應用中取得成功。一同學習、分享和成長!
© 2024 vocus All rights reserved.