分享
原 大话设计模式(golang) 五、工厂方法模式
平凡之路 · · 2781 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
模式特点:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这使得一个类的实例化延迟到其子类。
程序实例:计算器。
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())
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2781 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
模式特点:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这使得一个类的实例化延迟到其子类。
程序实例:计算器。
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())
}