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观察者模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cheems~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值