简单工厂模式

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)
    })
}