(二) 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 WorkerCreatorc = new(ProgrammerCreator)p := c.Create()taskProject := "Project"p.Work(&taskProject)c = new(FarmerCreator)f := c.Create()taskFarmland := "farmland"f.Work(&taskFarmland)}
运行结果:
完整代码:
package mainimport ("fmt")type Worker interface {Work(task *string)}type WorkerCreator interface {Create() Worker}//Programmertype 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}//Farmertype 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 WorkerCreatorc = new(ProgrammerCreator)p := c.Create()taskProject := "Project"p.Work(&taskProject)c = new(FarmerCreator)f := c.Create()taskFarmland := "farmland"f.Work(&taskFarmland)}
注:代码是从网络上找的
