[设计模式 Go实现] 创建型~简单工厂模式

go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。

代码实现

go 复制代码
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)
}

单元测试

go 复制代码
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")
	}
}

测试结果

相关推荐
天使街23号3 小时前
go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持
开发语言·后端·golang
颜酱4 小时前
理解编程范式(前端角度)
设计模式
雨中散步撒哈拉5 小时前
16、做中学 | 初三上期 Golang面向对象_进阶
爬虫·python·golang
将编程培养成爱好6 小时前
C++ 设计模式《账本事故:当备份被删光那天》
开发语言·c++·设计模式·备忘录模式
Java小混子8 小时前
golang项目CRUD示例
开发语言·后端·golang
想搞艺术的程序员8 小时前
Go 优雅关闭实践指南:从原理到框架落地
开发语言·后端·golang
FogLetter8 小时前
设计模式奇幻漂流:从单例孤岛到工厂流水线
前端·设计模式
guangzan12 小时前
常用设计模式:代理模式
设计模式
百***416613 小时前
Go-Gin Web 框架完整教程
前端·golang·gin
西幻凌云14 小时前
认识设计模式——单例模式
c++·单例模式·设计模式·线程安全·饿汉和懒汉