type Toy interface{
Speak()
}
type ToyFactory interface {
Create()Toy
}
type catFactory struct{
}
type cat struct{
}
func (this *cat)Speak(){
fmt.Println("喵喵")
}
func (this *catFactory)Create()Toy{
return &cat{}
}
type dog struct{
}
func(this* dog)Speak(){
fmt.Println("汪汪")
}
type dogFactory struct{
}
func(this *dogFactory)Create()Toy{
return &dog{}
}
func main(){
c:=&catFactory{}
d:=&dogFactory{}
p:=map[int]ToyFactory{}
p[0]=c
p[1]=d
for _,v:=range p{
v.Create().Speak()
}
var F ToyFactory
F=c
F.Create().Speak()
N:=new(ToyFactory)
N=c //报错
}
原因: 接口类本身是索引类型,而实现接口的类是具体类型,所以具体类型的指针才能赋值给抽象接口,抽象接口也不应该用new这种方式。