go设计模式之工厂模式浅谈2


本文摘自网络,作者go_hiro,侵删。


我的第一篇文章go设计模式之工厂模式浅谈|Go主题月中谈了一下工厂方法,发现我之前的思路是错误的,在此修改我错误的想法

2.工厂方法

工厂方法模式,简单来说是来为了解决简单工厂模式所出现的一些缺点而进行的改进。比如当一个简单的工厂模式要生产一种动物。能够生产Dog,Cat.但是如果要新增一种动物。那么就要修改源代码,也就是修改工厂的源代码!添加一个业务逻辑,显然不符合开闭原则,所以就有了工厂方法模式。提供一个抽象工厂方法模式,这样就可以避免新增的时候修改源代码,只要新建一个类来继承了工厂方法模式即可。

//Animal接口,描述动物具有哪些功能
type Animal interface {
    Call()
}

//Dog结构体
type Dog struct{}
//实现Animal接口
func (*Dog) Call() {
    fmt.Println("dog call")
}

//实现动物工厂AnimalFactry接口
func (*Dog) Create() Animal {
    return &Dog{}
}


//Cat结构体
type Cat struct{}
//实现Animal接口
func (*Cat) Call() {
    fmt.Println("cat call")
}

//实现动物工厂AnimalFactry接口
func (*Cat) Create() Animal {
    return &Cat{}
}
//工厂接口
type AnimalFactry interface {
    Create() Animal
}
//工厂方法
func Create(animal AnimalFactry) Animal {
    return animal.Create()
}

使用

dog := Create(&Dog{})
dog.Call()
cat := Create(&Cat{})
cat.Call()

通过Dog,Cat实现AnimalFactry和Animal,再由Create这个工厂方法生成对应的类,这时如果再添加一个Duck鸭子类,只需专心实现Duck类就可以了,只要Duck实现AnimalFactry和Animal即可

type Duck struct{}
//实现Animal接口
func (*Duck) Call() {
    fmt.Println("duck call")
}
//实现动物工厂AnimalFactry接口
func (*Duck) Create() Animal {
    return &Duck{}
}

使用新类

duck := Create(&Duck)
duck.Call()




相关阅读 >>

必须掌握的Golang23种设计模式之简单工厂模式

Golang 时间的格式化格式的含义

16 Golang结构体详解(二)

Golang基础-和mysql打交道

关于Golang中无法获取地址问题的解析

Golang 原子操作

Go语言 defer详解

Golang能做高并发的原因

手撸Golang 结构型设计模式 代理模式

手撸Golang etcd raft协议之4

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...