Golang设计模式之简单工厂模式

简单工厂模式

简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在这种模式中,一个工厂类负责创建其他类的实例,并且封装实例的创建逻辑。这种模式让类的实例化推迟到子类进行。

为什么需要简单工厂模式

在没有工厂模式的情况下,如果需要创建多种类型的对象,可能会导致一个类中包含大量条件判断语句,这不仅增加了代码的复杂性,也违反了单一职责原则和开闭原则。

简单工厂模式的优点

  1. 对象创建和使用的分离:客户端只需要知道所需产品对应的工厂,而无需知道具体的创建细节。
  2. 减少使用者记忆量:使用者不需要记住具体的类名,只需要知道参数即可。

简单工厂模式的缺点

  1. 工厂类职责过重:一旦工厂类不能工作,整个系统受到影响。
  2. 增加系统复杂度:系统中类的个数增加,复杂度和理解度也随之增加。
  3. 违反开闭原则:添加新产品需要修改工厂逻辑,导致工厂类越来越复杂。

简单工厂模式的角色和职责

  • 工厂(Factory)角色:简单工厂模式的核心,负责实现创建所有实例的内部逻辑。
  • 抽象产品(AbstractProduct)角色:简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口。
  • 具体产品(Concrete Product)角色:简单工厂模式所创建的具体实例对象。

Go示例

下面是一个使用Go语言实现的简单工厂模式示例,我们将创建一个汽车工厂,用于生产不同类型的汽车。

package main

import "fmt"

// 抽象产品:汽车接口
type Car interface {
    Start() string
}

// 具体产品:宝马汽车
type BMW struct{}

func (b BMW) Start() string {
    return "BMW started"
}

// 具体产品:奔驰汽车
type Mercedes struct{}

func (m Mercedes) Start() string {
    return "Mercedes started"
}

// 工厂:汽车工厂
type CarFactory struct{}

// 创建宝马汽车
func (c CarFactory) CreateBMW() Car {
    return BMW{}
}

// 创建奔驰汽车
func (c CarFactory) CreateMercedes() Car {
    return Mercedes{}
}

func main() {
    // 创建汽车工厂
    factory := CarFactory{}

    // 通过工厂创建宝马汽车
    bmw := factory.CreateBMW()
    fmt.Println(bmw.Start())

    // 通过工厂创建奔驰汽车
    mercedes := factory.CreateMercedes()
    fmt.Println(mercedes.Start())
}

在这个示例中,我们定义了一个Car接口,它有一个Start方法。然后我们创建了两个具体产品BMW和Mercedes,它们都实现了Car接口。CarFactory是工厂类,它有两个方法CreateBMW和CreateMercedes,分别用于创建宝马和奔驰汽车的实例。在main函数中,我们通过工厂创建了不同类型的汽车,并调用它们的Start方法。简单工厂模式来分离对象的创建和使用,使得代码更加模块化和易于维护。

打 赏