我命由我,不由天!


  • 搜索
prometheus docker golang linux kubernetes

简单工厂模式

发表于 2021-07-05 | 0 | 阅读次数 360

定义

简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

结构图

  • Factory:工厂类,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。(条件分支判断创建哪个产品类)
  • IProduct:抽象产品类,简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
  • Product:具体产品类,是简单工厂模式的创建目标。

代码

package main

import "fmt"

type Operator interface {
	GetResult()float64
}

type BaseOperation struct {
	NumA float64
	NumB float64
}

type OperationAdd struct {
	B BaseOperation
}

func (o *OperationAdd)GetResult()float64{
	return o.B.NumA + o.B.NumB
}

type OperationSub struct {
	B BaseOperation
}

func (o *OperationSub)GetResult()float64{
	return o.B.NumA - o.B.NumB
}


type OperationFactroy struct {

}

func (o *OperationFactroy) CreateOperate(operate string,numA,numB float64)Operator{
	var ret Operator
	switch operate {
	case "+":
		ret = &OperationAdd{
			B:BaseOperation{
				numA,numB,
			},
		}
		break
	case "-":
		ret = &OperationSub{
			B:BaseOperation{
				numA,numB,
			},
		}
		break
	}
	return ret
}

func main()  {
	f := OperationFactroy{}
	oper := f.CreateOperate("+",1,2)
	ret := oper.GetResult()
	fmt.Println(ret)
}

优点:

工厂类是整个工厂模式的核心,我们只需要传入给定的信息,就可以创建所需实例,在多人协作的时候,无需知道对象之间的内部依赖,可以直接创建,有利于整个软件体系结构的优化

缺点:

  1. 工厂类中包含了所有实例的创建逻辑,一旦这个工厂类出现问题,所有实例都会受到影响并且
  2. 工厂类中生产的产品都基于一个共同的接口,一旦要添加不同种类的产品,这就会增加工厂类的复杂度,将不同种类的产品混合在一起,违背了单一职责,系统的灵活性和可维护性都会降低
  3. 并且当新增产品的时候,必须要修改工厂类,违背了『系统对扩展开放,对修改关闭』的原则
  • 本文作者: Dante
  • 本文链接: https://gaodongfei.com/archives/简单工厂模式
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
gitlab ci推送镜像到harbour
UML类图
  • 文章目录
  • 站点概览
Dante

Dante

119 日志
5 分类
5 标签
RSS
Creative Commons
0%
© 2023 Dante
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
沪ICP备2020033702号