工厂方法模式
00 分钟
2024-11-10
标签
💡
工厂方法模式是工厂模式中的一种核心模式,适用于创建符合开闭原则的可扩展产品对象结构。它通过抽象工厂接口延迟对象的实例化,提供了更好的扩展性和灵活性,适合于产品体系复杂和多样化的场景。

定义

工厂方法模式是一种创建型设计模式,定义了一个创建对象的接口,让子类决定实例化哪一个具体类。工厂方法将对象的创建延迟到子类,从而满足“开闭原则”(Open-Closed Principle),使得系统更具扩展性。
特点:工厂方法模式通过子类化来避免简单工厂模式中“工厂类过于庞大”的问题,每一种具体产品都有对应的工厂类来负责创建。

结构

工厂方法模式主要由以下角色组成:
  • 抽象产品类(Product):定义工厂方法所要创建对象的接口。
  • 具体产品类(ConcreteProduct):实现抽象产品接口,表示工厂方法所创建的具体产品。
  • 抽象工厂类(Creator):声明工厂方法,用于返回一个抽象产品对象。可定义默认实现,也可以是抽象方法。
  • 具体工厂类(ConcreteCreator):实现工厂方法,返回对应的具体产品实例。

类图

notion image

代码实现

优点

  • 符合开闭原则:添加新的产品类时,只需增加对应的工厂类,无需修改已有代码。
  • 符合单一职责原则:每个具体工厂类仅负责创建一个具体产品,职责单一且清晰。
  • 灵活性:可以使用继承和多态机制,方便扩展和维护。

缺点

  • 增加类的数量:每新增一个具体产品,都要定义一个相应的具体工厂,导致类的数量较多。
  • 结构较复杂:相较于简单工厂模式,工厂方法模式的结构稍微复杂,尤其在产品种类较多时,容易增加系统的复杂度。

使用场景

  • 代码需要对产品类型进行扩展,且希望符合开闭原则,避免修改已有代码。
  • 创建的产品具有一定的多样性,但同一类产品共享相同的接口。
  • 需要一个创建对象的框架,使得子类可以决定实例化哪个具体类。

注意事项

  • 工厂方法模式适用于产品种类较多且变动频繁的情况,避免了简单工厂的代码膨胀。
  • 抽象工厂类的定义要尽可能稳定,不建议频繁变更,确保代码结构的稳定性。

扩展

工厂方法模式在一些场景下可以进一步扩展,以满足更加灵活的需求。
参数化工厂方法
可以通过为工厂方法添加参数,以动态创建不同类型的产品。例如,工厂方法接受一个类型参数,根据参数返回不同产品。这样可以在一个工厂类中创建不同的产品类型。

代码示例

工厂方法模式与其他工厂模式的对比

  • 简单工厂模式:通过一个工厂类创建不同的产品,适用于产品种类少的情况。
  • 工厂方法模式:将工厂接口延伸到子类,满足开闭原则,更加灵活。
  • 抽象工厂模式:创建一个产品族的对象,适合产品结构复杂、种类繁多的系统。
 
上一篇
很鸡儿扯的报错
下一篇
说明

评论
Loading...