2023-09-01
简单工厂模式
go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。
在这个simplefactory包中只有API 接口和NewAPI函数为包外可见,封装了实现细节。
type Cal interface {
Do(int64, int64) int64
}
func NewCal(symbol string) (i Cal) {
switch symbol {
case "+":
i = Add{}
case "*":
i = Multiply{}
}
return i
}
type Add struct {
}
func (a Add) Do(x, y int64) int64 {
return x + y
}
type Multiply struct {
}
func (m Multiply) Do(x, y int64) int64 {
return x * y
}
使用
import (
. "github.com/smartystreets/goconvey/convey"
"testing"
)
func TestNewCal(t *testing.T) {
Convey("简单工厂测试", t, func() {
var x, y int64 = 2, 3
So(NewCal("+").Do(x, y), ShouldEqual, 5)
So(NewCal("*").Do(x, y), ShouldEqual, 6)
})
}