上一:[GO实施] 23 GOF的设计模型:建筑模式
简单的分布式应用程序系统(示例代码项目):https://github.com/ruanrunxue/practice-design-pattern-go-implementationation
工厂方法模式类似于先前讨论的构建器模式。它们都封装了对象创建的逻辑,并为用户提供一个简单易用的对象来创建接口。在应用程序方案中,两者略有不同。构建器模式通常用于传递多个参数以实例化场景。工厂方法模式通常用于创建对象,而无需指定特定类型的对象。
在简单的分布式应用程序系统(示例代码工程)中,我们设计了CAR模块,以在本机增加(例如流量控制和日志)中添加其他功能。
模块的设计使用了修改的装饰器模式。因此,客户端实际上用作用途,例如:
在“服务消息中间”中,每次HTTP请求接收到上游服务时,都会致电以创建HTTP客户端并通过IT将请求重新发布到下游服务:
在上述实施中,我们在调用时会有硬码,因此,如果我们想在将来扩展,我们必须修改此代码逻辑,这违反了开放和关闭原则的OCP。
经验丰富的学生可能会认为,通过依赖关系接口,该方法调用时将用作入口。然后在初始化中,将特定类型注入中间:
上面的修改已从原始依赖性变为依赖性抽象,这与打开和关闭的原理一致。
但是,有一些并发呼叫的场景,因此它希望创建一个新的呼叫场景,以完成每次调用的网络通信,否则需要锁定以确保并发安全性。上述修改将在生命周期中引起相同的修改,显然与要求一致。
因此,我们需要一种方法来满足打开和关闭的原则,并且可以在每个呼叫方法上创建一个新示例。工厂方法模式可以满足这两个要求。让我们通过它完成代码的优化。
在上面的代码中,我们定义了一个工厂的抽象界面,并具有两个特定的实现。在本质上,依赖性以及创建新的方法:
以下总结了出厂方法模式的几个关键点:
上一篇文章的工厂方法和模式的实现是一种非常典型的面向对象样式。在下面,我们提供了更多的GO型实现。
上述实现的实现将函数在GO语言中的特征作为第一个阶级公民的特征,并定义了一些和谐,并且代码更简洁。
几个实现关键点类似于面向对象的样式。值得注意的是,我们等同于定义工厂方法的工厂方法。如果直接定义了工厂方法,那么实现是以下内容,并且多态性不能为实现了:
工厂方法模型的另一个变体是一个简单的工厂。它不会通过多态性,而是确定哪种产品是由简单条件决定的:
静态工厂方法是Java/C ++。它主要用于替换构造函数以完成对象的实例。它可以使代码更具可读性并在与客户端解耦中发挥作用。例如,Java的静态工厂方法的实现如下:
GO中没有静态的说法,并且可以通过普通功能直接完成对象的结构。例如:
许多学生很容易混淆工厂方法模型和抽象工厂模型。抽象的工厂模型主要用于实例化“产品家族”的场景,该场景可被视为工厂方法模型的演变。
参考[1] [GO实施] 23设计模式GOF:固定原理,Yuan Yizi
[2]设计模式,第3章。创建模式,GOF
[3] GO(Golang)的工厂模式,Soham Kamani
[4]工厂方法,维基百科百科全书
有关更多文章,请注意微信公共帐户:Yuan Yizi的邀请
原始:https://juejin.cn/post/710009776395764232