工厂模式之简单工厂(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("我是小米手机,我可以打电话")
}

  

  测试结果:

 

posted @   梦里藏梦、  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示