阿里巴巴网站建设的背景/武汉网站seo公司
GO简单工厂
由于 Go 中缺少类和继承等 OOP(面向对象) 特性, 所以无法使用 Go 来实现经典的工厂方法模式。 不过, 我们仍然能实现的基础版本.
场景
一个制作玩具的工厂。
代码结构
为了方便展示 放到了不同的文件中
Toy.go
定义个玩具的接口 声明共有的方法
package codeInHere//定义玩具产品接口
type toy interface {SetName( name string) //需要个名字GetName() stringSetUnitPrice(price int) //定义个单价GetUnitPrice() int
}
ToyAchieve.go
定义实现的结构体 实现玩具接口的方法
package codeInHere//定义具体产品 在这里实现toy接口
type toyAchieve struct {name stringunitPrice int
}
func (t *toyAchieve)GetName() string{return t.name
}func (t *toyAchieve)GetUnitPrice() int{return t.unitPrice
}func (t *toyAchieve)SetUnitPrice( price int) {t.unitPrice = price
}func (t *toyAchieve)SetName( name string) {t.name = name
}
YellowDuck.go
定义具体的产品
package codeInHere//具体产品玩具 小黄鸭
type yellowDuck struct {toyAchieve
}func newYellowDuck() toy {return &yellowDuck{toyAchieve{unitPrice: 100,name: "小黄鸭"},}
}
Transformers.go
定义具体的产品
package codeInHeretype transformers struct {toyAchieve
}func newTransformers() toy {return &transformers{toyAchieve{name: "变形金刚", unitPrice: 1000}}
}
ToyFactory.go
创建工厂
package codeInHereimport "fmt"func GetToy(toyType string)(toy ,error){if toyType == "yellowDuck"{return newYellowDuck(),nil}else if toyType == "transformers"{return newTransformers(),nil}else {return nil,fmt.Errorf("not have this")}
}
main.go
package main
运行
import ("designPatterns/FactoryMethod/codeInHere""fmt"
)
func main() {yellowDuck,_ := codeInHere.GetToy("yellowDuck")transformers,_:=codeInHere.GetToy("transformers")fmt.Printf("toyName : %s,toyPrice : %v" ,yellowDuck.GetName(),yellowDuck.GetUnitPrice())fmt.Println()fmt.Printf("toyName : %s,toyPrice : %v" ,transformers.GetName(),transformers.GetUnitPrice())
}
输出
toyName : 小黄鸭,toyPrice : 100
toyName : 变形金刚,toyPrice : 1000