ZBLOG

golang 工厂方法模式

工厂方法模式(Factory Method)是一种创建型设计模式,它定义了一个用于创建对象的接口,让子类决定将哪些类实例化。工厂方法模式使得一个类的实例化延迟到其子类。

下面是一个 Golang 实现工厂方法模式的示例代码:

  1. // 定义产品接口
  2. type Product interface {
  3. GetName() string
  4. }
  5. // 定义具体产品 A
  6. type ProductA struct {}
  7. func (p *ProductA) GetName() string {
  8. return "Product A"
  9. }
  10. // 定义具体产品 B
  11. type ProductB struct {}
  12. func (p *ProductB) GetName() string {
  13. return "Product B"
  14. }
  15. // 定义工厂接口
  16. type Factory interface {
  17. CreateProduct() Product
  18. }
  19. // 具体工厂 A,生产产品 A
  20. type FactoryA struct {}
  21. func (f *FactoryA) CreateProduct() Product {
  22. return &ProductA{}
  23. }
  24. // 具体工厂 B,生产产品 B
  25. type FactoryB struct {}
  26. func (f *FactoryB) CreateProduct() Product {
  27. return &ProductB{}
  28. }
  29. func main() {
  30. factoryA := &FactoryA{}
  31. productA := factoryA.CreateProduct()
  32. fmt.Println(productA.GetName())
  33. factoryB := &FactoryB{}
  34. productB := factoryB.CreateProduct()
  35. fmt.Println(productB.GetName())
  36. }

在这个示例中,我们定义了产品接口 Product,并且有两个具体产品实现了该接口:ProductAProductB。同时,我们还定义了一个工厂接口 Factory,并且有两个具体工厂实现了该接口:FactoryAFactoryBFactoryA 生产产品 A,FactoryB 生产产品 B。

在代码最后,我们使用具体工厂创建了两个产品,并且打印出它们的名称。

工厂方法模式的优点是:

  1. 客户端和具体产品之间解耦,客户端无需关心具体产品是如何创建的。
  2. 增加新产品时,只需要增加一个具体产品类和相应的具体工厂类即可,无需修改现有代码。

缺点是:

  1. 每新增一个产品就需要新增一个具体产品类和相应的具体工厂类,如果产品种类过多,会导致类的数量急剧增加,不易维护。
  2. 由于增加了抽象层,增加了系统的复杂度。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=211

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?