Golang中的工厂模式有哪些类型 详解Golang工厂模式分类及代码示例

golang中工厂模式分为简单工厂、工厂方法和抽象工厂三种类型。1. 简单工厂通过一个工厂函数集中创建不同对象,适用于类型不多的小项目,但扩展性差;2. 工厂方法定义接口由子类决定实例化哪个类,适合产品种类可能扩展的场景,符合开闭原则;3. 抽象工厂用于创建一组相关或依赖对象家族,适合多维度组合的产品结构,功能强大但实现复杂。

Golang中的工厂模式有哪些类型 详解Golang工厂模式分类及代码示例

在Golang中,工厂模式是一种常用的创建型设计模式,用于解耦对象的创建和使用。根据实现方式的不同,可以将工厂模式分为三类:简单工厂模式、工厂方法模式和抽象工厂模式。它们各自适用于不同的场景,下面分别介绍其特点及代码示例。

Golang中的工厂模式有哪些类型 详解Golang工厂模式分类及代码示例

简单工厂模式(Simple Factory)

适用场景:当你只需要一个集中的地方来创建不同类型的对象,并且类型数量不多时,适合用简单工厂。

Golang中的工厂模式有哪些类型 详解Golang工厂模式分类及代码示例

特点:通过一个“工厂函数”接收参数,返回具体的结构体实例。这种方式不严格符合开闭原则,因为新增产品类型需要修改工厂函数。

立即学习“go语言免费学习笔记(深入)”;

示例代码:

Golang中的工厂模式有哪些类型 详解Golang工厂模式分类及代码示例

type Animal interface {    Speak()}type Dog struct{}func (d *Dog) Speak() {    fmt.Println("Woof!")}type Cat struct{}func (c *Cat) Speak() {    fmt.Println("Meow!")type AnimalFactory struct{}func (f *AnimalFactory) CreateAnimal(animalType string) Animal {    switch animalType {    case "dog":        return &Dog{}    case "cat":        return &Cat{}    default:        return nil    }}

说明

CreateAnimal

是核心工厂方法,根据传入的字符串决定返回哪种对象。如果后续增加新动物类型,需要修改这个函数,不够灵活。

工厂方法模式(Factory Method)

适用场景:当你的系统希望延迟到子类去决定具体创建哪一个对象时,使用工厂方法模式。

特点:定义一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法把实例化的责任推迟到子类。

示例代码:

type Animal interface {    Speak()}type Dog struct{}func (d *Dog) Speak() { fmt.Println("Woof!") }type Cat struct{}func (c *Cat) Speak() { fmt.Println("Meow!") }// 工厂接口type AnimalFactory interface {    CreateAnimal() Animal}type DogFactory struct{}func (df *DogFactory) CreateAnimal() Animal {    return &Dog{}}type CatFactory struct{}func (cf *CatFactory) CreateAnimal() Animal {    return &Cat{}}

说明

每个具体工厂负责创建特定的对象。更加符合开闭原则,新增产品只需添加新工厂,不需要修改已有逻辑。适用于产品种类可能扩展的场景。

抽象工厂模式(Abstract Factory)

适用场景:当你需要创建一组相关或依赖对象家族,而不想指定具体类的时候,使用抽象工厂。

特点:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

示例代码:

type Animal interface {    Speak()}type ColorfulAnimal interface {    ShowColor()}type Dog struct{}func (d *Dog) Speak() { fmt.Println("Woof!") }type RedDog struct{ Dog }func (rd *RedDog) ShowColor() { fmt.Println("I'm red") }type BlueDog struct{ Dog }func (bd *BlueDog) ShowColor() { fmt.Println("I'm blue") }type AnimalFactory interface {    CreateAnimal() Animal    CreateColorfulAnimal() ColorfulAnimal}type RedAnimalFactory struct{}func (rf *RedAnimalFactory) CreateAnimal() Animal {    return &Dog{}}func (rf *RedAnimalFactory) CreateColorfulAnimal() ColorfulAnimal {    return &RedDog{}}type BlueAnimalFactory struct{}func (bf *BlueAnimalFactory) CreateAnimal() Animal {    return &Dog{}}func (bf *BlueAnimalFactory) CreateColorfulAnimal() ColorfulAnimal {    return &BlueDog{}}

说明

抽象工厂不仅创建一种对象,而是创建一整套相关的对象。更适合多个维度变化的产品族,比如颜色 + 动物种类。实现复杂度较高,适用于需求明确、结构复杂的项目。

总结一下

简单工厂:适合小项目,快速实现,缺点是不易扩展。工厂方法:适合产品种类可能增加的项目,更灵活。抽象工厂:适合多维度组合的产品结构,功能强大但实现复杂。

基本上就这些了。选择哪一种,主要看你要处理的对象结构有多复杂,以及是否需要应对未来的变化。

以上就是Golang中的工厂模式有哪些类型 详解Golang工厂模式分类及代码示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1397291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月15日 14:44:01
下一篇 2025年12月15日 14:44:09

相关推荐

发表回复

登录后才能评论
关注微信