工厂方法模式是一种创建型设计模式,其核心思想是定义一个用于创建对象的接口,但让实现这个接口的子类来决定实例化哪一个类。工厂方法把一个类的实例化推迟到其子类。
工厂方法模式通过面向抽象层开发,使得业务逻辑层与具体产品的创建解耦,遵循了面向抽象层接口编程的原则。
下面是一个使用Go语言实现的工厂方法模式示例,我们将创建一个形状工厂,用于生产不同类型的形状。
package main
import "fmt"
// 抽象产品:形状接口
type Shape interface {
Draw() string
}
// 具体产品:圆形
type Circle struct{}
func (c Circle) Draw() string {
return "Inside Circle::draw() method."
}
// 具体产品:正方形
type Square struct{}
func (s Square) Draw() string {
return "Inside Square::draw() method."
}
// 抽象工厂:形状工厂接口
type ShapeFactory interface {
CreateShape() Shape
}
// 具体工厂:圆形工厂
type CircleFactory struct{}
func (c CircleFactory) CreateShape() Shape {
return Circle{}
}
// 具体工厂:正方形工厂
type SquareFactory struct{}
func (s SquareFactory) CreateShape() Shape {
return Square{}
}
func main() {
// 创建圆形工厂和正方形工厂
circleFactory := CircleFactory{}
squareFactory := SquareFactory{}
// 使用圆形工厂创建圆形并绘制
shape1 := circleFactory.CreateShape()
fmt.Println(shape1.Draw())
// 使用正方形工厂创建正方形并绘制
shape2 := squareFactory.CreateShape()
fmt.Println(shape2.Draw())
}
在上面的示例中,我们定义了一个Shape
接口,它有一个Draw
方法。然后我们创建了两个具体产品Circle
和Square
,它们都实现了Shape
接口。ShapeFactory
是形状工厂接口,它有一个方法CreateShape
,用于创建形状实例。CircleFactory
和SquareFactory
是具体工厂,它们分别实现了CreateShape
方法,用于创建圆形和正方形实例。在main
函数中,我们通过工厂创建了不同类型的形状,并调用它们的Draw
方法。
这个示例展示了如何使用工厂方法模式来分离对象的创建和使用,使得代码更加模块化和易于维护。同时,它也展示了如何通过工厂方法模式来遵循开闭原则,即在不修改现有代码的情况下,扩展新的产品类型。
如果您喜欢我的文章,请点击下面按钮随意打赏,您的支持是我最大的动力。
最新评论