常见的23种创建模式分为创建型/结构型/行为型三种,而在这其中,Singleton和Factory应该是创建型中非常简单的模式了。在本文中,将或用interface的功能讨论一下如何使用更好的使用go语言进行设计。
简单工厂模式
简单工厂模式的应用在Java系的框架中几乎一定会存在。这种设计模式几乎也被滥用到一使用new的时候就会有人问你,为什么不用个工厂模式呢?现在我们也自己问一下自己,要不用个工厂模式试一下?
场景说明
使用工厂模式来生产各种厂商的手机比如:Apple/Huawei/Xiaomi等。
项目 | 说明 |
---|---|
Phone | 接口。其中只有一个方法为ShowBrand用以提示是哪种具体手机 |
Apple手机的构造体 | type IPhone struct |
华为手机的构造体 | type HPhone struct |
小米手机的构造体 | type XPhone struct |
Apple手机的ShowBrand实现 | func (phone IPhone) ShowBrand() |
华为手机的ShowBrand实现 | func (phone HPhone) ShowBrand() |
小米手机的ShowBrand实现 | func (phone XPhone) ShowBrand() |
手机工厂的构造体 | type PhoneFactory struct |
手机工厂的CreatePhone实现 | func (factory PhoneFactory) CreatePhone(brand string) Phone |
代码示例
[root@liumiaocn goprj]# cat basic-interface-factory.go
package main
import "fmt"
type Phone interface {
ShowBrand()
}
type IPhone struct {
}
func (phone IPhone) ShowBrand() {
("[Phone Brand]: Apple")
}
type HPhone struct {
}
func (phone HPhone) ShowBrand() {
("[Phone Brand]: Huawei")
}
type XPhone struct {
}
func (phone XPhone) ShowBrand() {
("[Phone Brand]: Xiaomi")
}
type PhoneFactory struct {
}
func (factory PhoneFactory) CreatePhone(brand string) Phone {
switch brand {
case "HW":
return new(HPhone)
case "XM":
return new(XPhone)
case "PG":
return new(IPhone)
default:
return nil
}
}
func main() {
var phone Phone
factory := new(PhoneFactory)
phone = ("HW")
()
phone = ("XM")
()
phone = ("PG")
()
}
[root@liumiaocn goprj]#
执行结果
[root@liumiaocn goprj]# go run
[Phone Brand]: Huawei
[Phone Brand]: Xiaomi
[Phone Brand]: Apple
[root@liumiaocn goprj]#
总结
通过interface的或用,在go语言中能做到很多事情,本文通过简单的例子实现了简单工厂模式。interface在实际的使用中与java还是有一些区别的,感觉像是在c和java之间找到了一条中间的道路,但是写起来还是略显繁琐,但是每种语言都是有着自己的长项的短项,而且有其特定的应用领域,还是那句老话,语言本身没有最好,适合才是最重要的。