Golang设计模式——01工厂方法模式

简介: Golang设计模式——01工厂方法模式

工厂方法模式

优点

  1. 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
  2. 工厂方法克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点
  3. 一个简单工厂的工厂类,变成一个工厂抽象接口和多个具体生产对象的工厂,于是我们要增加一个新的逻辑运算,就不需要更改原来的工厂类了,只需要增加此功能的运算类和对应的工厂类就可以了。

缺点

  1. 每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。
  2. 当产品种类非常多时,就会出现大量的与之对应的工厂类,这不应该是我们所希望的

场景

  1. 工厂方法模式就是升级版的简单工厂模式

代码

package Factory_Method
type number struct {
  a float64
  b float64
}
type Operation interface {
  SetA(float64)
  SetB(float64)
  GetResult() float64
}
func (num *number) SetA(n float64) {
  num.a = n
}
func (num *number) SetB(n float64) {
  num.b = n
}
type addOperation struct {
  number
}
func (num *addOperation) GetResult() float64 {
  return num.a + num.b
}
type subOperation struct {
  number
}
func (num *subOperation) GetResult() float64 {
  return num.a - num.b
}
type mulOperation struct {
  number
}
func (num *mulOperation) GetResult() float64 {
  return num.a * num.b
}
type Factory interface {
  CreateOperation() Operation
}
type AddFactory struct {
}
func (a *AddFactory) CreateOperation() Operation {
  return &addOperation{}
}
type SubFactory struct {
}
func (s *SubFactory) CreateOperation() Operation {
  return &subOperation{}
}
type MulFactory struct {
}
func (m *MulFactory) CreateOperation() Operation {
  return &mulOperation{}
}
package Factory_Method
import (
  "fmt"
  "testing"
)
func TestCreateOperation(t *testing.T) {
  fac := &AddFactory{}
  opAdd := fac.CreateOperation()
  opAdd.SetA(1)
  opAdd.SetB(2)
  fmt.Println(opAdd.GetResult())
}

其他设计模式

设计模式Git源代码

00简单工厂模式

01工厂方法模式

02抽象工厂模式

03外观模式

04建造者模式

05桥接模式

06命令模式

07迭代器模式

08模板模式

09访问者模式

10备忘录模式

11责任链模式

12中介模式

13原型模式

14状态模式

15策略模式

16享元模式

17组合模式

18解释器模式

19单例模式

20适配器模式

21代理模式

22装饰器模式

23观察者模式


目录
相关文章
|
3天前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 构造函数模式
js设计模式【详解】—— 构造函数模式
14 6
|
3天前
|
测试技术 Go
golang 的重试弹性模式
Golang 中的重试机制实现了一个名为 `Retrier` 的结构体,用于实现弹性模式。`Retrier` 创建时需要指定重试间隔(如常量间隔或指数递增间隔)和错误分类器。分类器决定了哪些错误应被重试。默认情况下,如果未提供分类器,则使用默认分类器,它简单地将非 nil 错误标记为应重试。提供了三种分类器:默认、白名单和黑名单。`Run` 和 `RunCtx` 是执行重试的函数,后者接受上下文以便处理超时。通过 `calcSleep` 计算带有随机抖动的休眠时间,增加重试的不可预测性,减少并发冲突。如果达到最大重试次数或上下文超时,重试将停止。
|
8天前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
8天前
|
设计模式 存储 算法
设计模式学习心得之五种创建者模式(2)
设计模式学习心得之五种创建者模式(2)
13 2
|
9天前
|
设计模式 搜索推荐
工厂方法模式-大话设计模式
工厂方法模式-大话设计模式
8 1
|
14天前
|
设计模式 Java 数据库连接
Java设计模式之工厂方法模式详解
Java设计模式之工厂方法模式详解
|
14天前
|
设计模式 算法
行为型设计模式之模板模式
行为型设计模式之模板模式
|
26天前
|
设计模式 新零售 Java
设计模式最佳套路5 —— 愉快地使用工厂方法模式
工厂模式一般配合策略模式一起使用,当系统中有多种产品(策略),且每种产品有多个实例时,此时适合使用工厂模式:每种产品对应的工厂提供该产品不同实例的创建功能,从而避免调用方和产品创建逻辑的耦合,完美符合迪米特法则(最少知道原则)。
38 6
|
26天前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
23 5
|
26天前
|
设计模式 Java 关系型数据库
设计模式第2弹:工厂方法模式
type ComputerProduct struct{} // 实现工厂方法 func (computer ComputerProduct) GetInformation() string { return "电脑,官方称呼计算机,主要用于进行数据运算的一台机器。" }
29 4