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

posted @ 2021-09-26 20:14  cheems~  阅读(32)  评论(0编辑  收藏  举报