工厂方法模式 (Factory Method Pattern)
定义一个创建对象的接口,让子类决定实例化哪个类
模式定义
工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
适用场景
- 当一个类不知道它所必须创建的对象的类的时候
- 当一个类希望由它的子类来指定它所创建的对象的时候
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
结构图
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();
}
}
优缺点
优点
- 将对象的创建和使用解耦
- 符合开闭原则,新增产品时无需修改现有代码
- 符合单一职责原则,每个工厂只负责一种产品的创建
缺点
- 每次添加新产品时,都需要编写新的具体产品类和对应的工厂类
- 引入了额外的类,增加了系统复杂度