工厂(Factory)
工厂是领域驱动设计中负责创建复杂对象的模式,它封装了对象创建的复杂性。
汽车生产案例
在汽车制造厂中,工厂模式可以理解为:
- 发动机生产线(根据规格要求组装不同型号的发动机)
- 车身焊接车间(根据车型配置进行不同的焊接工艺)
- 整车装配线(根据订单要求组装不同配置的汽车)
这些场景都涉及根据输入参数创建特定类型的对象。
主要特点
- 封装创建逻辑:隐藏对象创建的复杂性
- 一致性保证:确保创建的对象满足业务规则
- 解耦:将对象使用与创建分离
- 可替换性:可灵活切换不同的创建实现
示例
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);
}
}
使用场景
- 对象创建逻辑复杂
- 需要根据不同类型创建不同对象
- 需要确保创建的对象满足业务规则
- 需要解耦对象创建与使用
设计原则
- 单一职责:工厂只负责对象创建
- 开闭原则:新增类型不影响已有代码
- 依赖倒置:依赖抽象而非具体实现