Go语言设计模式·简单工厂模式

go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。

NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。

在这个simplefactory包中只有API 接口和NewAPI函数为包外可见,封装了实现细节。

simple.go代码
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)
}
simple_test.go代码
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")
    }
}

本文节选于Go合集《Go语言设计模式》GOLANG ROADMAP 一个专注Go语言学习、求职的社区。

相关推荐
自学AI的鲨鱼儿4 小时前
cursor 使用 gvm管理的go的环境出现 Failed to find the “go“ binary in either GOROOT() 错误
golang·cursor·gvm
席万里4 小时前
Go开源库gcurl实际生产级应用
开发语言·后端·golang
ChineHe8 小时前
Golang并发编程篇002_Go并发基础
开发语言·后端·golang
apigfly19 小时前
深入Android系统(十三)Android的窗口系统
android·设计模式·源码
麻辣兔变形记1 天前
基于 Go‑Zero 的用户 CRUD Demo:如何一步步从 MySQL + sqlx 演进为 PostgreSQL + GORM + 微服务架构
mysql·微服务·postgresql·架构·golang
i***27951 天前
【golang学习之旅】使用VScode安装配置Go开发环境
vscode·学习·golang
y***54881 天前
Java设计模式之观察者模式
观察者模式·设计模式
明洞日记1 天前
【设计模式手册010】组合模式 - 树形结构的优雅处理
java·设计模式·组合模式
帅中的小灰灰1 天前
C++编程策略设计模式
开发语言·c++·设计模式
MM_MS1 天前
C#小案例-->汽车租聘系统计价功能
c#·汽车·简单工厂模式·抽象工厂模式·visual studio