go语言中工厂模式分为简单工厂和抽象工厂。1. 简单工厂适合单一维度产品创建,通过参数决定实例类型,结构简单但扩展性差;2. 抽象工厂用于创建多个相关产品组成的家族,定义接口屏蔽实现细节,易于扩展产品族。两者区别在于目标、扩展性和复杂度,应根据项目需求选择使用,避免过度设计,结合接口编程并保持职责单一。

在Go语言中,工厂模式是创建型设计模式的一种重要实现方式,用来解耦对象的创建与使用。常见的工厂模式包括简单工厂和抽象工厂两种形式。它们各有适用场景,理解它们的区别和用法,对写出结构清晰、易于扩展的代码非常有帮助。

简单工厂不是GoF提出的23种设计模式之一,但在实际开发中非常常见。它通过一个工厂类根据传入的参数决定创建哪一种产品类的实例。

type Animal interface {
Speak()
}
type Dog struct{}
func (d *Dog) Speak() { fmt.Println("Woof!") }
type Cat struct{}
func (c *Cat) Speak() { fmt.Println("Meow!") }
func NewAnimal(animalType string) Animal {
switch animalType {
case "dog":
return &Dog{}
case "cat":
return &Cat{}
default:
return nil
}
}这种方式简单直接,但当产品种类越来越多或需要支持多个产品族时,就显得力不从心了。
立即学习“go语言免费学习笔记(深入)”;
抽象工厂适用于产品不是单一类型,而是多个相关或依赖对象组成的家族的情况。比如不同品牌的电脑配件(键盘+鼠标),或者跨平台的UI组件库(按钮+文本框)等。

// 定义产品族接口
type Button interface {
Click()
}
type TextBox interface {
Input()
}
// Windows风格的具体产品
type WinButton struct{}
func (b *WinButton) Click() { fmt.Println("Windows button clicked") }
type WinTextBox struct{}
func (t *WinTextBox) Input() { fmt.Println("Windows text box input") }
// Mac风格的具体产品
type MacButton struct{}
func (b *MacButton) Click() { fmt.Println("Mac button clicked") }
type MacTextBox struct{}
func (t *MacTextBox) Input() { fmt.Println("Mac text box input") }
// 工厂接口
type UIFactory interface {
CreateButton() Button
CreateTextBox() TextBox
}
// 具体工厂
type WinFactory struct{}
func (f *WinFactory) CreateButton() Button { return &WinButton{} }
func (f *WinFactory) CreateTextBox() TextBox { return &WinTextBox{} }
type MacFactory struct{}
func (f *MacFactory) CreateButton() Button { return &MacButton{} }
func (f *MacFactory) CreateTextBox() TextBox { return &MacTextBox{} }这样,客户端只需要选择一个具体的工厂,就可以得到一整套风格一致的产品,而无需关心具体实现细节。
| 维度 | 简单工厂 | 抽象工厂 |
|---|---|---|
| 目标 | 创建单一产品 | 创建产品族 |
| 扩展性 | 增加新产品需修改工厂逻辑 | 新增产品族只需新增工厂类 |
| 复杂度 | 简单易懂 | 结构更复杂,适合大型项目 |
| 使用频率 | 高,适合多数基础场景 | 中,适合多变或多维产品系统 |
基本上就这些。工厂模式本身并不复杂,但要根据项目的实际情况合理选用,才能真正发挥它的价值。
以上就是Golang中的工厂模式有哪些实现方式 对比简单工厂与抽象工厂的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号