golang设计模式 简单工厂模式

228 阅读1分钟

1、描述

又称静态工厂方法模式,属于创建型模式。可以根据参数的不通返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类实例,被创建的实例通常具有共同的父类。

2、实现

我们目前有两个操作类Add、Sub,以后可能会有更多的(Mul、Div等),他们共同实现了一个接口Operator

//操作类接口
type Operator interface {
	Operate(int, int) int
}

//加法操作类
type Add struct {}

func (*Add)Operate(a, b int) int{
	return a + b
}

//减法操作类
type Sub struct {}

func (*Sub)Operate(a, b int) int{
	return a - b
}

//***************client端代码*****************
//根据不同的参数,实例化不同的操作类
func CreateOperator(operate string) Operator {
	switch operate {
	case "add":
		return &Add{}
	case "sub":
		return &Sub{}
	default:
		panic("参数错误")
		return nil
	}
}
func main() {
	var opr Operator
	opr = CreateOperator("add")
	fmt.Println(opr.Operate(1,4))

	opr = CreateOperator("sub")
	fmt.Println(opr.Operate(1,4))
}

3、优点

将客户端和创建产品实例解耦,使客户端秩序关注如何获取实例,符合单一职责。

4、缺点

违背了开闭原则,以后可能还有Mul、Div等其他操作,每一次添加操作类都要在客户端增加对应的switch分支,维护成本高。