工厂方法模式
工厂方法模式(Factory Method Pattern)又称为工厂模式,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,
即通过不同的工厂子类来创建不同的产品对象。
优点 和 缺点
– 优点
- 符合
开闭
原则, 具有很强的扩展性,弹性和可维护性
- 可以很好的对累进行约束,
- 客户只需要知道所需产品的具体工厂,而无须知道具体工厂的创建产品的过程,甚至不需要知道具体产品的类名
– 缺点
- 每增加一个产品时,都需要一个具体类和一个具体创建者,增加体统类的数目增多, 复杂性增加
- 对简单工厂,增加功能修改的是工厂类;对工厂方法,增加功能修改的是产品类
UML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| type Operator interface { SetA(int) SetB(int) Result() int }
type OperatorFactory interface { Create() Operator }
type OperatorBase struct { a, b int }
func (o *OperatorBase) SetA(a int) { o.a = a }
func (o *OperatorBase) SetB(b int) { o.b = b } type PlusOperator struct { *OperatorBase }
type PlusOperatorFactory struct{}
func (PlusOperatorFactory) Create() Operator { return &PlusOperator{ OperatorBase: &OperatorBase{}, } }
func (o PlusOperator) Result() int { return o.a + o.b } type MinusOperator struct { *OperatorBase }
type MinusOperatorFactory struct{}
func (MinusOperatorFactory) Create() Operator { return &MinusOperator{ OperatorBase: &OperatorBase{}, } }
func (o MinusOperator) Result() int { return o.a - o.b }
|