您的位置:首页 > 编程语言 > Go语言

大话设计模式(golang) 五、工厂方法模式

2016-07-14 22:55 495 查看
模式特点:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这使得一个类的实例化延迟到其子类。
程序实例:计算器。



package main

import (
"fmt"
)

type Operation struct {
a float64
b float64
}

type OperationI interface {
GetResult() float64
SetA(float64)
SetB(float64)
}

func (op *Operation) SetA(a float64) {
op.a = a
}

func (op *Operation) SetB(b float64) {
op.b = b
}

type AddOperation struct {
Operation
}

func (this *AddOperation) GetResult() float64 {
return this.a + this.b
}

type SubOperation struct {
Operation
}

func (this *SubOperation) GetResult() float64 {
return this.a - this.b
}

type MulOperation struct {
Operation
}

func (this *MulOperation) GetResult() float64 {
return this.a * this.b
}

type DivOperation struct {
Operation
}

func (this *DivOperation) GetResult() float64 {
return this.a / this.b
}

type IFactory interface {
CreateOperation() Operation
}

type AddFactory struct {
}

func (this *AddFactory) CreateOperation() OperationI {
return &(AddOperation{})
}

type SubFactory struct {
}

func (this *SubFactory) CreateOperation() OperationI {
return &(SubOperation{})
}

type MulFactory struct {
}

func (this *MulFactory) CreateOperation() OperationI {
return &(MulOperation{})
}

type DivFactory struct {
}

func (this *DivFactory) CreateOperation() OperationI {
return &(DivOperation{})
}

func main() {
fac := &(AddFactory{})
oper := fac.CreateOperation()
oper.SetA(1)
oper.SetB(2)
fmt.Println(oper.GetResult())
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式