简单工厂模式
00 分钟
2024-11-10
标签
💡
简单工厂模式是入门级的工厂模式,通过一个工厂类来统一管理产品对象的创建过程。虽然存在扩展性和维护性方面的限制,但它是实现工厂模式的基础概念,适合在小型项目或简单应用中使用。

定义

简单工厂模式是一种创建型设计模式,用于根据提供的参数,动态决定创建某种类型的对象。它将对象的创建逻辑集中在一个工厂类中,避免了客户端直接实例化对象的繁琐代码简单工厂模式并非 GoF 设计模式中的一种

结构

简单工厂包含如下角色:
  • 工厂类(Factory):包含静态方法,通过传入的参数创建并返回具体产品实例。
  • 抽象产品类(Product):定义产品对象的接口,规定工厂生产的对象需实现的行为。
  • 具体产品类(ConcreteProduct):实现抽象产品接口,定义具体产品对象的行为。

类图

TODO:

实现

优缺点

优点:
  • 封装创建逻辑:将对象的创建过程封装在工厂类中,客户端无需关心具体实例化过程。
  • 集中管理:通过一个类管理对象的创建,易于维护和修改创建逻辑。
  • 扩展便捷:新产品类可以直接添加到工厂类中,减少客户端修改。
封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。
缺点:
增加新产品时还是需要修改工厂类的代码,违背了“开闭原则”。
  • 扩展性差:添加新产品时,需要修改工厂类代码,违反“开闭原则”(Open-Closed Principle)。
  • 代码膨胀:工厂类负责的产品类型过多时,容易导致工厂代码复杂化,变得难以维护。
  • 单一职责问题:工厂类集中了所有产品的创建逻辑,当产品种类较多时,不符合单一职责原则。

使用场景

  • 需要创建不同类型的产品,但客户端不需要知道产品的具体类,只需要知道产品的接口。
  • 创建过程较为简单,没有复杂的创建逻辑。
  • 产品族数量有限,且变化不频繁。

注意:

  • 适用于产品种类较少,且产品变化不频繁的场景。若产品种类和创建逻辑复杂,推荐使用其他工厂模式(如工厂方法模式或抽象工厂模式)。
  • 可以结合配置文件或反射机制减少对工厂类的修改,提高扩展性。

与其他工厂模式的对比:

 

扩展

静态工厂

简单工厂可以扩展为静态工厂模式,即将工厂方法声明为 static,这样可以直接通过类名调用工厂方法,而无需实例化工厂类。这种方式通常用于创建无需修改内部状态的对象。

实现静态工厂的原因

  • 减少类实例化:通过 static 方法创建对象可以避免实例化工厂类,从而减少系统资源的消耗。
  • 提高访问速度:静态方法可以直接调用,避免了对象创建的步骤。
  • 统一创建入口:所有对象的创建都集中到一个或多个静态方法中,便于维护和使用。

代码示例

在简单工厂代码的基础上,可以将 createProduct 方法改为静态方法,且工厂类无需实例化:

使用场景

  • 简单实例化:静态工厂适合无状态或轻量级的对象实例化,尤其是重复创建同类对象的场景。
  • 全局调用:当某些产品对象需要在多个地方重复创建且逻辑相同,可以使用静态工厂集中管理。

注意事项

  • 静态工厂方法无法继承,因此无法形成复杂的工厂结构。
  • 不适合需要维护状态或依赖注入的复杂对象创建场景。
上一篇
很鸡儿扯的报错
下一篇
说明

评论
Loading...