go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。
代码实现
package simplefactoryimport "fmt"//API is interface
type API interface {Say(name string) string
}//NewAPI return Api instance by type
func NewAPI(t int) API {if t == 1 {return &hiAPI{}} else if t == 2 {return &helloAPI{}}return nil
}//hiAPI is one of API implement
type hiAPI struct{}//Say hi to name
func (*hiAPI) Say(name string) string {return fmt.Sprintf("Hi, %s", name)
}//HelloAPI is another API implement
type helloAPI struct{}//Say hello to name
func (*helloAPI) Say(name string) string {return fmt.Sprintf("Hello, %s", name)
}
单元测试
package simplefactoryimport "testing"//TestType1 test get hiapi with factory
func TestType1(t *testing.T) {api := NewAPI(1)s := api.Say("Tom")if s != "Hi, Tom" {t.Fatal("Type1 test fail")}
}func TestType2(t *testing.T) {api := NewAPI(2)s := api.Say("Tom")if s != "Hello, Tom" {t.Fatal("Type2 test fail")}
}