(二) go语言设计模式-创建模式之抽象工厂模式(Abstract Factory)
抽象工厂模式介绍
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类,每个生成的工厂都能按照工厂模式提供对象。改模式的意图是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,主要解决主要解决接口选择的问题。
抽象工厂模式go实现
抽象工厂实现的UML图
首先定义Worker接口,其中包含一个Work(task *string)方法。
然后定义创建Worker的接口WorkerCreator,包含一个接口Create() ,返回值为Worker。
type Worker interface {
Work(task *string)
}
type WorkerCreator interface {
Create() Worker
}
1.我们假设有一Worker叫Programmer,它实现了Work接口。
2.定义Programmer的构造类叫ProgrammerCreator,它实现了Create()接口。
type Programmer struct {
}
func (p *Programmer) Work(task *string) {
fmt.Println("Programmer process: ", *task)
}
type ProgrammerCreator struct {
}
func (c *ProgrammerCreator) Create() Worker {
s := new(Programmer)
return s
}
1.我们假设还有一Worker叫Farmer,它实现了Work接口。
2.定义Farmer的构造类叫FarmerCreator,它实现了Create()接口。
type Farmer struct {
}
func (f *Farmer) Work(task *string) {
fmt.Println("Farmer process:", *task)
}
type FarmerCreator struct {
}
func (c *FarmerCreator) Create() Worker {
s := new(Farmer)
return s
}
测试代码:
func main() {
var c WorkerCreator
c = new(ProgrammerCreator)
p := c.Create()
taskProject := "Project"
p.Work(&taskProject)
c = new(FarmerCreator)
f := c.Create()
taskFarmland := "farmland"
f.Work(&taskFarmland)
}
运行结果:
完整代码:
package main
import (
"fmt"
)
type Worker interface {
Work(task *string)
}
type WorkerCreator interface {
Create() Worker
}
//Programmer
type Programmer struct {
}
func (p *Programmer) Work(task *string) {
fmt.Println("Programmer process: ", *task)
}
type ProgrammerCreator struct {
}
func (c *ProgrammerCreator) Create() Worker {
s := new(Programmer)
return s
}
//Farmer
type Farmer struct {
}
func (f *Farmer) Work(task *string) {
fmt.Println("Farmer process:", *task)
}
type FarmerCreator struct {
}
func (c *FarmerCreator) Create() Worker {
s := new(Farmer)
return s
}
func main() {
var c WorkerCreator
c = new(ProgrammerCreator)
p := c.Create()
taskProject := "Project"
p.Work(&taskProject)
c = new(FarmerCreator)
f := c.Create()
taskFarmland := "farmland"
f.Work(&taskFarmland)
}
注:代码是从网络上找的