搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 编程之颠 > (二) go语言设计模式-创建模式之抽象工厂模式(Abstract Factory)

(二) go语言设计模式-创建模式之抽象工厂模式(Abstract Factory)

编程之颠 2020-02-17

抽象工厂模式介绍


在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类,每个生成的工厂都能按照工厂模式提供对象。改模式的意图是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,主要解决主要解决接口选择的问题。




抽象工厂模式go实现

(二) go语言设计模式-创建模式之抽象工厂模式(Abstract Factory)

抽象工厂实现的UML图




  1. 首先定义Worker接口,其中包含一个Work(task *string)方法。

  2. 然后定义创建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}
//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 WorkerCreator
c = new(ProgrammerCreator) p := c.Create() taskProject := "Project" p.Work(&taskProject)
c = new(FarmerCreator) f := c.Create() taskFarmland := "farmland" f.Work(&taskFarmland)}

注:代码是从网络上找的

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《(二) go语言设计模式-创建模式之抽象工厂模式(Abstract Factory)》的版权归原作者「编程之颠」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注编程之颠微信公众号

编程之颠微信公众号:gh_0ee28c3c6cd4

编程之颠

手机扫描上方二维码即可关注编程之颠微信公众号

编程之颠最新文章

精品公众号随机推荐