工厂模式之简单工厂(golang实现)
由于最近在学习golang,就想着把golang的设计模式也重温一下,当然设计模式是面向对象思想的传承,是一套被反复使用、多数人知晓的,并不限于使用何种语言来实现。
从这里开启golang的设计之旅吧~
go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。
NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。
还是以造手机为例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package simpleFactory import ( log "github.com/sirupsen/logrus" ) //定义一个phone接口 type Phone interface { Call() ; } //定义创建手机的函数 func NewPhone(t int) Phone{ if t==1{ return &apple{} } else if t==2{ return &huawei{} } else if t==3{ return &xiaomi{} } return nil } //type1 type apple struct { } //实现call方法 func (*apple) Call() { log.Info( "我是苹果手机,我可以打电话" ) } //type2 type huawei struct { } //实现call方法 func (*huawei) Call() { log.Info( "我是华为手机,我可以打电话" ) } //type3 type xiaomi struct { } //实现call方法 func (*xiaomi) Call() { log.Info( "我是小米手机,我可以打电话" ) } |
客户端测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package simpleFactory import ( log "github.com/sirupsen/logrus" ) //定义一个phone接口 type Phone interface { Call() ; } //定义创建手机的函数 func NewPhone(t int) Phone{ if t==1{ return &apple{} } else if t==2{ return &huawei{} } else if t==3{ return &xiaomi{} } return nil } //type1 type apple struct { } //实现call方法 func (*apple) Call() { log.Info( "我是苹果手机,我可以打电话" ) } //type2 type huawei struct { } //实现call方法 func (*huawei) Call() { log.Info( "我是华为手机,我可以打电话" ) } //type3 type xiaomi struct { } //实现call方法 func (*xiaomi) Call() { log.Info( "我是小米手机,我可以打电话" ) } |
测试结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效