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语言学习、求职的社区。

相关推荐
古城小栈16 小时前
Golang 中 return 与 defer 的 长幼尊卑
golang
teamlet18 小时前
Gear DNS - 一个go语言开发的小型dns系统
golang·dns·网络服务
Kiri霧19 小时前
Go 结构体
java·开发语言·golang
捧 花19 小时前
Go Web 中 WebSocket 原理与实战详解
网络·后端·websocket·网络协议·http·golang·web
Kiri霧19 小时前
Go 切片表达式
java·服务器·golang
平凡之路无尽路20 小时前
智能体设计模式:构建智能系统的实践指南
人工智能·设计模式·自然语言处理·nlp·aigc·vllm
ZNineSun21 小时前
Go的Http框架:gin
http·golang·gin
周杰伦_Jay1 天前
【后端开发语言对比】Java、Python、Go语言对比及开发框架全解析
java·python·golang
Clarence Liu1 天前
redis (2) 一文读懂redis的四种模式 客户端分析 以go-redis为例
redis·golang·bootstrap
古城小栈1 天前
Go 语言 ARM64 架构优化:边缘计算场景适配
架构·golang·边缘计算