1. 意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2. 结构
3. 4类参与者
-
Product
定义工厂方法所创建的方法的接口 -
ConcreteProduct
实现Product方法 -
Creator
1.声明工厂方法,该方法返回一个Product类型的对象。或者定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象
2.可以调用工厂方法以创建一个Product对象 -
ConcreteCreator
重定义工厂方法以返回一个ConcreteProduct实例
4. go代码实现
package main
import "fmt"
// 定义接口
type Animal interface {
Cry()
}
// 实现类1
type Cat struct {}
// 实现类2
type Dog struct {}
// 实现类1方法实现
func (Cat) Cry() {
fmt.Println("miao")
}
// 实现类2方法实现
func (Dog) Cry() {
fmt.Println("wang")
}
// 工厂类
type AnimalFactory struct {}
// 工厂类方法实现
func (AnimalFactory) getAnimalObj(animalType string) Animal {
var animal Animal
switch animalType {
case "cat":
animal = new(Cat)
case "dog":
animal = new(Dog)
default:
panic("no this kind animal")
}
return animal
}
// 测试
func main() {
new(AnimalFactory).getAnimalObj("cat").Cry()
new(AnimalFactory).getAnimalObj("dog").Cry()
}
[参考文档1]《设计模式》-机械工业出版社
3.3节 FACTORY METHOD(工厂方法)——对象创建型模式
参考文档2