模式定义

工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

适用场景

结构图

graph TD A[Creator] --> B{createProduct} B --> C[Product] D[ConcreteCreator] --> E{createProduct} E --> F[ConcreteProduct]

实现示例

Java 实现

// 产品接口
public interface Product {
    void use();
}

// 具体产品
public class ConcreteProduct implements Product {
    @Override
    public void use() {
        System.out.println("使用具体产品");
    }
}

// 创建者抽象类
public abstract class Creator {
    public abstract Product factoryMethod();
    
    public void anOperation() {
        Product product = factoryMethod();
        product.use();
    }
}

// 具体创建者
public class ConcreteCreator extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProduct();
    }
}
                

优缺点

优点

  • 将对象的创建和使用解耦
  • 符合开闭原则,新增产品时无需修改现有代码
  • 符合单一职责原则,每个工厂只负责一种产品的创建

缺点

  • 每次添加新产品时,都需要编写新的具体产品类和对应的工厂类
  • 引入了额外的类,增加了系统复杂度