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

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

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

特点:通过一个“工厂函数”接收参数,返回具体的结构体实例。这种方式不严格符合开闭原则,因为新增产品类型需要修改工厂函数。
立即学习“go语言免费学习笔记(深入)”;
示例代码:

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
适用场景:当你的系统希望延迟到子类去决定具体创建哪一个对象时,使用工厂方法模式。
特点:定义一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法把实例化的责任推迟到子类。
示例代码:
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{}
}说明:
适用场景:当你需要创建一组相关或依赖对象家族,而不想指定具体类的时候,使用抽象工厂。
特点:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
示例代码:
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工厂模式分类及代码示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号