zvvq技术分享网

工厂设计模式(工厂设计模式使用场景)

作者:zvvq博客网
导读工厂设计模式广泛应用于面向对象编程中。它提供了一个用于创建对象的接口,但允许子类决定要实例化哪些类。在本文中,我们将探讨如何在 Golang 中实现工厂模式,了解其好处,并

zvvq

工厂设计模式广泛应用于面向对象编程中。它提供了一个用于创建对象的接口,但允许子类决定要实例化哪些类。在本文中,我们将探讨如何在 Golang 中实现工厂模式,了解其好处,并分析受日常情况启发的实际使用示例。 内容来自zvvq

什么是工厂?

Factory 定义了一个用于创建对象的接口,但将实例化具体类的责任委托给了子类。这促进了以解耦和灵活的方式创建对象,使代码更加模块化并且更易于维护。 内容来自zvvq

好处

解耦:将对象的创建与其实现分开,促进更清晰、更模块化的代码。 灵活性:无需修改现有代码即可轻松引入新类。 维护:使代码更容易维护和发展,因为创建逻辑集中在一个地方。

实施工厂

让我们用一个日常的例子来说明工厂模式:一个订餐系统,可以创建一些不同类型的餐食(披萨和沙拉)。 内容来自samhan

1 - 创建界面

首先,我们需要定义一个将由所有“具体类”的膳食实现的接口。

zvvq.cn

1 zvvq好,好zvvq

2

copyright zvvq

3 本文来自zvvq

4

本文来自zvvq

5 zvvq好,好zvvq

包主 本文来自zvvq

类型食物接口{

本文来自zvvq

准备

本文来自zvvq

} copyright zvvq

2 - 创建 ENUM 并实现接口

为了让我们在开发过程中的生活更轻松,并避免在验证过程中输入错误,一个好的做法是创建一个 ENUM 以保持一致性,并且如果我们想在将来添加新食物,也可以更容易

内容来自zvvq,别采集哟

1 内容来自zvvq,别采集哟

2 zvvq.cn

3

内容来自zvvq,别采集哟

4 zvvq好,好zvvq

5 本文来自zvvq

6 zvvq.cn

7

copyright zvvq

8 zvvq

9 内容来自samhan666

10 zvvq

11 zvvq

12

内容来自zvvq

包主

copyright zvvq

类型 FoodType int copyright zvvq

常量(

zvvq好,好zvvq

PizzaType 食物类型 = iota

内容来自zvvq

沙拉类型

内容来自zvvq,别采集哟

内容来自zvvq,别采集哟

类型食物接口{ 内容来自samhan666

准备

内容来自zvvq,别采集哟

} 本文来自zvvq

现在让我们实现 Food 接口。在示例中,我们将仅显示一条消息,在现实生活中,这就是创建我们正在处理的对象的地方 zvvq.cn

1

copyright zvvq

2 内容来自samhan

3 zvvq

4 zvvq.cn

5 内容来自samhan666

6

copyright zvvq

7 zvvq

8 内容来自zvvq

9 zvvq好,好zvvq

10 内容来自samhan666

11 内容来自zvvq

12 内容来自zvvq,别采集哟

13 zvvq

14

zvvq.cn

15

内容来自samhan666

16

内容来自zvvq,别采集哟

17

copyright zvvq

18

内容来自samhan666

19

zvvq

20

内容来自zvvq,别采集哟

21 copyright zvvq

22 zvvq.cn

23 内容来自zvvq,别采集哟

24 zvvq

包主

内容来自zvvq

类型 FoodType int 内容来自samhan666

常量(

copyright zvvq

PizzaType 食物类型 = iota

本文来自zvvq

沙拉类型

内容来自samhan666

zvvq

类型食物接口{

zvvq.cn

准备 zvvq好,好zvvq

}

内容来自samhan666

类型 Pizza 结构{}

本文来自zvvq

func (p Pizza) 准备() {

copyright zvvq

fmt.Println("准备披萨...")

zvvq

} 本文来自zvvq

类型沙拉结构体{} zvvq.cn

func (s 沙拉) 准备() { 内容来自zvvq,别采集哟

fmt.Println("准备沙拉...")

copyright zvvq

} 内容来自samhan

3 - 创建工厂

现在,让我们创建一个工厂,它将根据作为参数接收的枚举来决定要实例化哪个具体类。 内容来自zvvq,别采集哟

1

内容来自zvvq

2 内容来自zvvq,别采集哟

3

zvvq.cn

4 zvvq

5

zvvq

6 本文来自zvvq

7

内容来自samhan

8 内容来自samhan666

9

内容来自samhan

10 内容来自zvvq,别采集哟

11 zvvq.cn

12 内容来自samhan

13

内容来自zvvq

14

内容来自zvvq

包主

copyright zvvq

类型 FoodFactory 结构{} copyright zvvq

func (f FoodFactory) CreateFood(ft FoodType) 食品 {

zvvq好,好zvvq

切换英尺{ 内容来自samhan

案例 披萨类型: copyright zvvq

返回&披萨{} zvvq好,好zvvq

案例沙拉类型:

内容来自zvvq,别采集哟

返回&沙拉{}

内容来自zvvq

默认: 内容来自zvvq,别采集哟

返回零

zvvq.cn

}

zvvq好,好zvvq

} 内容来自samhan666

4 - 使用工厂

最后,我们将使用工厂来制作我们的食物。

内容来自samhan666

1

内容来自zvvq,别采集哟

2

zvvq.cn

3 本文来自zvvq

4 内容来自zvvq,别采集哟

5 内容来自zvvq,别采集哟

6

内容来自samhan666

7 copyright zvvq

8

zvvq好,好zvvq

9

zvvq

10

zvvq

11

内容来自samhan

12 内容来自samhan666

13

内容来自zvvq,别采集哟

14 内容来自zvvq

15 内容来自samhan666

包主 内容来自zvvq,别采集哟

函数主() {

zvvq

厨房 := FoodFactory{}

内容来自samhan

披萨 := kitchen.CreateFood(PizzaType)

内容来自zvvq

如果披萨!= nil { 内容来自samhan666

披萨.Prepare() 内容来自samhan666

} zvvq好,好zvvq

沙拉 := kitchen.CreateFood(SaladType)

内容来自zvvq

如果沙拉!= nil { 内容来自zvvq,别采集哟

沙拉.Prepare()

zvvq

}

内容来自zvvq

} 内容来自zvvq

这将是运行我们的应用程序后的结果: zvvq

1 内容来自samhan

2

copyright zvvq

准备披萨...

zvvq

准备沙拉... zvvq.cn

我们所做的总结

食物接口:定义了所有具体食物必须遵循的契约,确保它们都实现了Prepare方法。 Enum FoodType:使用类型常量来表示不同类型的食物,提高代码的可读性和安全性。 具体类(Pizza 和 Salad):实现 Food 接口并提供自己的Prepare 方法的实现。 FoodFactory:包含对象创建逻辑。 CreateFood 方法根据 FoodType 枚举决定实例化哪个具体类。 Main 方法:演示使用工厂创建不同的对象并调用其方法,说明工厂模式提供的灵活性和解耦性。

结论

工厂设计模式是促进对象创建的解耦和灵活性的强大工具。在Golang中,这种模式的实现是直接有效的,允许创建模块化且易于维护的系统。使用接口和工厂,我们可以集中创建逻辑并在新需求出现时简化代码演化。

zvvq

以上就是工厂设计模式的详细内容,更多请关注其它相关文章! 内容来自zvvq