抽象工厂模式介绍
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类,每个生成的工厂都能按照工厂模式提供对象。改模式的意图是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,主要解决主要解决接口选择的问题。
抽象工厂模式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) }
注:代码是从网络上找的
关注该公众号,带来更多go编程知识