Go 中的工厂模式
Factory pattern in Go
我正在尝试使用 Go 实现工厂模式,这里是示例 https://play.golang.org/p/ASU0UiJ0ch
我有一个接口 Pet 和一个结构 Dog 所以 Dog 应该有属性Pet,在这种情况下只有一个是物种,当试图通过工厂 NewPet[ 初始化对象 Dog 时=21=],有人可以指教一下吗。
你的 NewPet
工厂 return 在类型断言中输入 Pet
,而不是 *Pet
。 (您很少需要指向接口的指针)
return Pets[pet].(func(string) Pet)(name)
您的 Pet 构造函数还需要 return 键入 Pet
以满足工厂函数签名,您可以将其简化为:
func NewDog(name string) Pet {
return &Dog{
name: name,
}
}
现在由于所有函数都具有相同的签名,您可以使用该签名定义 Pets
映射以避免类型断言的需要
var Pets = map[string]func(name string) Pet
我正在尝试使用 Go 实现工厂模式,这里是示例 https://play.golang.org/p/ASU0UiJ0ch
我有一个接口 Pet 和一个结构 Dog 所以 Dog 应该有属性Pet,在这种情况下只有一个是物种,当试图通过工厂 NewPet[ 初始化对象 Dog 时=21=],有人可以指教一下吗。
你的 NewPet
工厂 return 在类型断言中输入 Pet
,而不是 *Pet
。 (您很少需要指向接口的指针)
return Pets[pet].(func(string) Pet)(name)
您的 Pet 构造函数还需要 return 键入 Pet
以满足工厂函数签名,您可以将其简化为:
func NewDog(name string) Pet {
return &Dog{
name: name,
}
}
现在由于所有函数都具有相同的签名,您可以使用该签名定义 Pets
映射以避免类型断言的需要
var Pets = map[string]func(name string) Pet