工厂模式是一种创建型设计模式,它提供了一个接口来创建对象,但允许子类决定实例化哪个类。它封装了对象的创建逻辑,提供了灵活性和松耦合性,使客户端代码与创建的对象之间解耦。
在Go语言中,我们可以使用接口、结构体和工厂函数的组合来实现工厂模式。以下是一个简单的示例,演示了Go语言中的工厂模式的用法:
package main
import "fmt"
// 接口定义
type Shape interface {
Draw()
}
// 结构体实现
type Rectangle struct{
}
func (r Rectangle) Draw() {
fmt.Println("Drawing a rectangle")
}
type Circle struct{
}
func (c Circle) Draw() {
fmt.Println("Drawing a circle")
}
// 工厂函数
func CreateShape(shapeType string) Shape {
switch shapeType {
case "rectangle":
return Rectangle{
}
case "circle":
return Circle{
}
default:
return nil
}
}
func main() {
shape1 := CreateShape("rectangle")
shape1.Draw()
shape2 := CreateShape("circle")
shape2.Draw()
}
在上面的示例中,我们定义了一个 Shape
接口,并实现了 Rectangle
和 Circle
两个结构体来满足该接口的要求。然后,我们使用 CreateShape
工厂函数根据传入的参数来创建不同的形状对象。
通过调用 CreateShape
函数,我们可以根据需要创建不同类型的形状对象,而无需直接与具体的对象类型耦合。这提供了更大的灵活性,使得我们可以轻松地扩展和修改对象的创建逻辑。