Golang設計模式之工廠方法模式講解和代碼示例
Go 工廠方法模式講解和代碼示例
概念示例
由于 Go 中缺少類和繼承等 OOP 特性, 所以無法使用 Go 來實現(xiàn)經(jīng)典的工廠方法模式。 不過, 我們仍然能實現(xiàn)模式的基礎版本, 即簡單工廠。
在本例中, 我們將使用工廠結構體來構建多種類型的武器。
首先, 我們來創(chuàng)建一個名為 iGun
的接口, 其中將定義一支槍所需具備的所有方法。 然后是實現(xiàn)了 iGun 接口的 gun
槍支結構體類型。 兩種具體的槍支——ak47
與 musket
火槍 ——兩者都嵌入了槍支結構體, 且間接實現(xiàn)了所有的 iGun
方法。
gunFactory
槍支工廠結構體將發(fā)揮工廠的作用, 即通過傳入?yún)?shù)構建所需類型的槍支。 main.go 則扮演著客戶端的角色。 其不會直接與 ak47
或 musket
進行互動, 而是依靠 gunFactory
來創(chuàng)建多種槍支的實例, 僅使用字符參數(shù)來控制生產(chǎn)。
iGun.go: 產(chǎn)品接口
package main type iGun interface { setName(name string) setPower(power string) getName() string getPower() string }
gun.go: 具體產(chǎn)品
package main type Gun struct { name string power int } func (g *Gun) setName(name string) { g.name = name } func (g *Gun) setPower(power int) { g.power = power } func (g *Gun) getName() string { return g.name } func (g *Gun) getPower() int { return g.power }
ak47.go: 具體產(chǎn)品
package main type Ak47 struct { Gun } func newAk47() iGun { return &Ak47{ Gun: Gun{ name: "AK47 gun", power: 4, }, } }
musket.go: 具體產(chǎn)品
package main type musket struct { Gun } func newMusket() iGun { return &musket{ Gun: Gun{ name: "Musket gun", power: 1, }, } }
gunFactory.go: 工廠
package main import "fmt" func getGun(gunType string) (iGun, error) { switch gunType { case "ak47": return newAk47(), nil case "nusket": return newMusket(), nil default: return nil, fmt.Errorf("Wrong gun type passed") } }
main.go: 客戶端代碼
package main import "fmt" func main() { ak47, _ := getGun("ak47") musket, _ := getGun("musket") printDetails(ak47) printDetails(musket) } func printDetails(g iGun) { fmt.Printf("Gun: %s", g.getName()) fmt.Println() fmt.Printf("Power: %d", g.getPower()) fmt.Println() }
到此這篇關于Golang設計模式之工廠方法模式講解和代碼示例的文章就介紹到這了,更多相關Golang 工廠方法模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang環(huán)境變量設置和查看工具go env詳解
go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下2023-07-07