Go 工厂方法

103 阅读2分钟

在 Go 语言中,工厂方法是一种创建对象的设计模式,通常用于解耦创建对象的过程。工厂方法使用函数来创建对象,而不是直接实例化。

示例代码如下:

package main

import "fmt"

// 定义一个接口,表示待创建的对象
type Product interface {
	Name() string
}

// 定义一个结构体,表示具体的对象
type ProductA struct{}

// 实现产品的方法
func (p *ProductA) Name() string {
	return "ProductA"
}

// 定义一个工厂对象类型
type Factory interface {
	Create() Product
}

// 定义一个工厂结构体来创建ProductA实例
type ProductAFactory struct{}

// 创建ProductA实例
func (f *ProductAFactory) Create() Product {
	return &ProductA{}
}

func main() {
	// 创建ProductA
	paFactory := &ProductAFactory{}
	pa := paFactory.Create()
	fmt.Println(pa.Name())
}

在上面的例子中,我们首先定义了一个产品接口 Product,它是待创建对象的类型。紧接着,我们定义了一个结构体 ProductA,它实现了 Product 接口中的方法。这个步骤是用来具体实现对象。

然后,我们定义了一个工厂接口 Factory,通过它我们可以利用通用的方式来创建具体的对象。最后,我们定义了一个结构 ProductAFactory,它实现了Factory 接口中的 Create 方法,用来创建 ProductA 实例。

注释说明:

  • 为了更好地说明代码,我们使用了 ProductA 作为示例,并实现了一个 Name() 方法。在实际项目中,具体的工厂方法可能会根据具体的需求来定义更多的方法。
  • 接口的定义使用了 type 关键字,且名称必须大写字母开头。实现了该接口的结构体,必须实现该接口内的方法。
  • ProductAFactory 中,我们实现了 Create 方法。该方法很简单,只是返回了 &ProductA{} 实例,即创建了一个 ProductA 实例,并将其作为结果返回。
  • 在执行时,我们首先通过 paFactory := &ProductAFactory{}创建一个 ProductAFactory 实例,然后调用 Create() 方法,就能获取到一个 ProductA 实例,最后输出了 ProductA

工厂方法模式是一种经典的设计模式,可以帮助我们实现解耦和简化对象创建的过程,增加了可重用性和可测试性。同时,在实际开发中,也可以根据具体的业务需求,在该模式的基础上进行扩展和优化。