go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。
代码实现
package simplefactory import "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 simplefactory import "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") } }
测试结果