设计模式:Go简单工厂模式
创建型模式
1. 介绍
1.1. 定义
功能类型其他语言的构造函数,一般用于创建Go结构体时,结构体字段初始化。
1.2. 角色
- Factory:工厂,负责实现创建产品逻辑。直接被外部调用创建所需产品实例。
- IProduct:抽象产品,所有产品功能的抽象。
- Product:具体产品,工厂模式创建的目标。
2. 理解
2.1. 应用场景
- 创建对象比较少。
- 创建对象具有相同功能方法,具体实现可以不同。
2.2. 优点
- Go语法特殊性,可以禁止用户使用Product{}或new(Product)直接创建产品。
- 屏蔽产品创建细节,降低创建产品代码与产品的耦合性。
2.2. 缺点
- 不符合开放封闭原则
3. 演示
3.1. IProduct
product_interface.go
package simplefactory
type Computer interface {
Start()
}
3.2. Product
product.go
package simplefactory
import "fmt"
// MacBookPro
type macBookPro struct {
}
func (m *macBookPro) Start() {
fmt.Println("MacBookPro start...")
}
//ThinkPad
type thinkPad struct {
}
func (t *thinkPad) Start() {
fmt.Println("ThinkPad start...")
}
3.3. Factory
factory.go
package simplefactory
type ComputerFactory struct {
}
func (c *ComputerFactory) CreateComputer(name string) Computer {
var computer Computer = nil
switch name {
case "macbookpro":
computer = &macBookPro{}
case "thinkpad":
computer = &thinkPad{}
}
return computer
}
3.4. 测试
product_interface.go
package simplefactory
import (
"testing"
)
func TestComputerFactory_CreateComputer(t *testing.T) {
factory := new(ComputerFactory)
mbp := factory.CreateComputer("macbookpro")
mbp.Start()
tp := factory.CreateComputer("thinkpad")
tp.Start()
}