Skip to content

Latest commit

 

History

History
33 lines (25 loc) · 1.75 KB

工厂方法.md

File metadata and controls

33 lines (25 loc) · 1.75 KB

工厂方法模式 FactoryMethod

必要性说明

主要用于创建对象,将对象的创建过程封装为类,将new的细节从表层隐藏起来,此为**“简单工厂”,其特点是内部包含了逻辑判断。这其实违反了“开放-封闭原则”**,在这一基础上进一步改进得到工厂方法模式。

定义

定义一个用于创建对象的接口,[1]让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。

难点 & 关键

  1. 让子类决定实例化

    一个产品类对应一个工厂类,这些具体的工厂类都继承于同一接口;在产品变化时,只需要改变对应的工厂类即可,于此满足了“开放-封闭原则”。

要素

  • 具体工厂类与具体产品类一一对应
  • 所有具体工厂类继承于同一接口
  • 客户负责选择具体工厂类

优点

  • 集中封装了对象的创建,每个工厂职责单一,符合高内聚的原则,降低了客户与产品对象之间的耦合。
  • 满足了“开放-封闭原则”。

不足

  • 每新增一个产品就要新增一个产品工厂类,增加了额外的开发量。
  • 自然语义与程序语义之间的逻辑判断由客户端实现(如“+”和add()之间)。

和其他模式之间的关系

  • 工厂方法所属的类不一定是工厂类(抽象工厂、建造者),它可能是一个普通类、一个框架类,甚至一个自由函数。

适用环境

一般用于创建一类对象,为此提供了统一创建对象的接口,并提高了可维护性和可测试性。总的来说,以下场景非常合适:

  • 创建一类对象,或工厂的职责较为单一时。
  • 产品参数化维度较低时。
  • 总的工厂创建其他工厂。