我试图用Go实现工厂模式,这里是示例https://play.golang.org/p/ASU0UiJ0ch
我有一个界面宠物和一个结构狗所以狗应该具有宠物的属性,这种情况只有一个是硬币,当试图通过工厂 NewPet 初始化对象 Dog 时,有人可以提供建议。
答案 0 :(得分:6)
您的NewPet
工厂在类型断言中返回类型Pet
,而不是*Pet
。 (你很少想要一个指向接口的指针)
return Pets[pet].(func(string) Pet)(name)
您的Pet构造函数还需要返回类型Pet
以满足工厂函数签名,您可以将其简化为:
func NewDog(name string) Pet {
return &Dog{
name: name,
}
}
现在由于所有函数都具有相同的签名,您可以使用该签名定义Pets
映射,以避免需要类型断言
var Pets = map[string]func(name string) Pet