Skip to content

工厂(Factory)

工厂是领域驱动设计中负责创建复杂对象的模式,它封装了对象创建的复杂性。

汽车生产案例

在汽车制造厂中,工厂模式可以理解为:

  • 发动机生产线(根据规格要求组装不同型号的发动机)
  • 车身焊接车间(根据车型配置进行不同的焊接工艺)
  • 整车装配线(根据订单要求组装不同配置的汽车)

这些场景都涉及根据输入参数创建特定类型的对象。

主要特点

  1. 封装创建逻辑:隐藏对象创建的复杂性
  2. 一致性保证:确保创建的对象满足业务规则
  3. 解耦:将对象使用与创建分离
  4. 可替换性:可灵活切换不同的创建实现

示例

java
// 发动机工厂
class EngineFactory {
  public Engine createEngine(EngineSpec spec) {
    // 根据规格创建不同类型的发动机
    switch(spec.getType()) {
      case "V6":
        return new V6Engine(spec);
      case "V8":
        return new V8Engine(spec);
      case "Electric":
        return new ElectricMotor(spec);
      default:
        throw new IllegalArgumentException("未知发动机类型");
    }
  }
}

// 整车配置工厂
class CarConfigurationFactory {
  public CarConfiguration createConfiguration(
      String model, String color, EngineSpec engine, List<Feature> features) {
    // 验证配置有效性
    if (!isValidCombination(model, engine)) {
      throw new InvalidConfigurationException();
    }
    
    // 创建配置对象
    return new CarConfiguration(model, color, engine, features);
  }
}

使用场景

  1. 对象创建逻辑复杂
  2. 需要根据不同类型创建不同对象
  3. 需要确保创建的对象满足业务规则
  4. 需要解耦对象创建与使用

设计原则

  1. 单一职责:工厂只负责对象创建
  2. 开闭原则:新增类型不影响已有代码
  3. 依赖倒置:依赖抽象而非具体实现