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分支,维护成本高。