设计模式之工厂模式汇总

工厂模式汇总

工厂模式汇总

  • 简单工厂,方法工厂,抽象工厂总结
    • 工厂模式目的就是解耦
    • 存在等级结构(抽象类),且产品之间有一定的联系,就可以使用抽象工厂。
    • 如果不存在等级结构,或者是工厂生产的产品无联系,可以使用方法工厂。
    • 简单工厂一般是知道了需要的产品是什么样子。
    • 抽象工厂是方法工厂的高级模式。

各类模式关键点

  • 简单工厂
    • 场景
      • 根据不同参数,返回不同类的实例。
      • 就是常用的工厂函数
    • 优点
      • 使用者不需要知道实现细节,只需要相关的类就好
      • 使用以及维护代码方便
    • 缺点
      • 对于工厂类,负担过重,如果有额外的逻辑,可能会导致工厂过于复杂。
      • 违反“开闭原则”,一旦添加新产品就不得不修改逻辑
    • 包含角色
      • 工厂
      • 抽象产品
      • 具体产品
    • uml图
  • 方法工厂
    • 优点
      • 更符合“开闭原则”,新产品,只需要新建工厂类以及产品类即可。
        • 简单工厂是需要更改工厂逻辑
      • 符合单一职责原则。每个工厂生产对应的产品
        • 简单工厂工厂生成所有的产品
      • 不使用静态工厂,可以形成基于继承的等级结构
        • 简单工厂使用静态工厂
      • 总的来说,方法工厂是简单工厂的扩展,让扩展更简单,继承可行。
    • 缺点
      • 每增加一个产品,就要生成一个工厂,增加编译运行,项目代码复杂度
      • 单一工厂只能生产一种产品
    • 场景
      • 不知道所需要的类是什么(简单工厂反之)
      • 类通过子类创建对象
    • 角色
      • 抽象工厂
      • 工厂
      • 抽象产品
      • 产品
    • uml
  • 抽象工厂
    • 优点
      • 继承方法工厂的优点,解决方法工厂工厂只能生产单一产品的缺点
      • 增加等级机构。并且对工厂产生的产品进行约束(产品簇)
    • 缺点
      • 产品簇的扩展比较复杂。如果新增一种产品,可能需要改动所有的工厂
    • 场景
      • 相关的产品存在一定的联系,存在一定的等级结构,就可以用抽象工厂。 (这里可以用方法工厂模式,因为工厂模式各个产品不存在等级结构,且不存在相关的联系)
    • 角色
      • 抽象工厂(可以生产多个产品)
      • 具体工厂类
      • 抽象产品
      • 具体产品
    • uml图