Golang設(shè)計模式之工廠方法模式講解和代碼示例
Go 工廠方法模式講解和代碼示例
概念示例
由于 Go 中缺少類和繼承等 OOP 特性, 所以無法使用 Go 來實現(xiàn)經(jīng)典的工廠方法模式。 不過, 我們?nèi)匀荒軐崿F(xiàn)模式的基礎(chǔ)版本, 即簡單工廠。
在本例中, 我們將使用工廠結(jié)構(gòu)體來構(gòu)建多種類型的武器。
首先, 我們來創(chuàng)建一個名為 iGun的接口, 其中將定義一支槍所需具備的所有方法。 然后是實現(xiàn)了 iGun 接口的 gun槍支結(jié)構(gòu)體類型。 兩種具體的槍支——ak47與 musket火槍 ——兩者都嵌入了槍支結(jié)構(gòu)體, 且間接實現(xiàn)了所有的 iGun方法。
gunFactory槍支工廠結(jié)構(gòu)體將發(fā)揮工廠的作用, 即通過傳入?yún)?shù)構(gòu)建所需類型的槍支。 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()
}到此這篇關(guān)于Golang設(shè)計模式之工廠方法模式講解和代碼示例的文章就介紹到這了,更多相關(guān)Golang 工廠方法模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang環(huán)境變量設(shè)置和查看工具go env詳解
go env 是 Go 工具鏈中的一個命令,用于設(shè)置和查看當(dāng)前 Golang 環(huán)境的相關(guān)信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設(shè)置和查看工具go env,需要的朋友可以參考下2023-07-07
Go基礎(chǔ)教程系列之?dāng)?shù)據(jù)類型詳細(xì)說明
這篇文章主要介紹了Go基礎(chǔ)教程系列之?dāng)?shù)據(jù)類型詳細(xì)說明,需要的朋友可以參考下2022-04-04

