工厂模式分为三种更加细分的类型
- 简单工厂(Simple Factory)
- 工厂方法(Factory Method)
- 抽象工厂(Abstract Factory)
由于 Go 本身是没有构造函数的,一般采用 NewName
的方式创建对象/接口,当它返回的是接口的时候,其实就是简单工厂模式
逻辑结构

代码实现
代码路径:https://github.com/XBoom/DesignPatterns/tree/main/02_SimpleFactory
-
有一个简单的产品接口(这里指汽车)
1
2
3type Car interface {
Name() string
} -
有两个具体的实现类
1
2
3
4
5
6
7
8type BYD struct {
}
func (B BYD) Name() string {
return "BYD"
}
var _ Car = (*BYD)(nil)另外一个具体类
1
2
3
4
5
6
7
8type Tesla struct {
}
func (t Tesla) Name() string {
return "Tesla"
}
var _ Car = (*Tesla)(nil) -
实现一个简单工厂
1
2
3
4
5
6
7
8
9
10
11
12
13type Factory struct {
}
func (f *Factory) CreateCar(typ string) Car {
switch typ {
case "byd":
return &BYD{}
case "tesla":
return &Tesla{}
default:
panic("unknown type")
}
}
单元测试
1 | var expectByd = "BYD" |
根据参数的参数不同构建不同的产品对象,当增加一种产品的时候,这里就需要修改 CreateCar
方法,并在使用的时候追加CreateCar
新的类型与业务,违反了开闭原则
总结
- 增加新的产品类型时需要修改工厂类的代码,违反了开闭原则
- 简单工厂模式适用于对象较少、对象类型固定的场景,可以提高对象的创建效率和统一管理对象的创建过程