Golang设计模式之工厂方法模式讲解和代码示例

Bena ·
更新时间:2024-09-21
· 1360 次阅读

目录

Go 工厂方法模式讲解和代码示例

概念示例

iGun.go: 产品接口

gun.go: 具体产品

ak47.go: 具体产品

musket.go: 具体产品

gunFactory.go: 工厂

main.go: 客户端代码

Go 工厂方法模式讲解和代码示例 概念示例

由于 Go 中缺少类和继承等 OOP 特性, 所以无法使用 Go 来实现经典的工厂方法模式。 不过, 我们仍然能实现模式的基础版本, 即简单工厂。

在本例中, 我们将使用工厂结构体来构建多种类型的武器。

首先, 我们来创建一个名为 iGun的接口, 其中将定义一支枪所需具备的所有方法。 然后是实现了 iGun 接口的 gun枪支结构体类型。 两种具体的枪支——ak47musket火枪 ——两者都嵌入了枪支结构体, 且间接实现了所有的 i­Gun方法。

gun­Factory枪支工厂结构体将发挥工厂的作用, 即通过传入参数构建所需类型的枪支。 main.go 则扮演着客户端的角色。 其不会直接与 ak47musket进行互动, 而是依靠 gun­Factory来创建多种枪支的实例, 仅使用字符参数来控制生产。

iGun.go: 产品接口 package main type iGun interface { setName(name string) setPower(power string) getName() string getPower() string } gun.go: 具体产品 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: 具体产品 package main type Ak47 struct { Gun } func newAk47() iGun { return &Ak47{ Gun: Gun{ name: "AK47 gun", power: 4, }, } } musket.go: 具体产品 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 工厂方法模式内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



工厂方法模式 示例 方法 golang

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章