go语言快速入门:简单工厂模式的实现(23)

时间:2025-03-03 15:45:25

常见的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之间找到了一条中间的道路,但是写起来还是略显繁琐,但是每种语言都是有着自己的长项的短项,而且有其特定的应用领域,还是那句老话,语言本身没有最好,适合才是最重要的。