工厂方法
更新: 6/22/2025 字数: 0 字 时长: 0 分钟
定义
工厂方法模式 (Factory Method Pattern) 定义一个创建对象的接口,但让子类决定实例化哪个类。工厂方法使类的实例化延迟到子类。
角色
- 抽象产品 (Product): 定义产品的接口
- 具体产品 (ConcreteProduct): 实现抽象产品接口
- 抽象工厂 (Creator): 声明工厂方法
- 具体工厂 (ConcreteCreator): 实现工厂方法,返回具体产品实例
实现
java
// 抽象产品
interface Product {
void use();
}
// 具体产品 A
class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("使用产品 A");
}
}
// 具体产品 B
class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("使用产品 B");
}
}
// 抽象工厂
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.use();
}
}
// 具体工厂 A
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
// 具体工厂 B
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}
// 客户端使用
public class Client {
public static void main(String[] args) {
Creator creatorA = new ConcreteCreatorA();
creatorA.someOperation();
Creator creatorB = new ConcreteCreatorB();
creatorB.someOperation();
}
}
优缺点
优点:
- 避免创建者和具体产品之间的紧密耦合
- 单一职责原则:产品创建代码集中在单一位置
- 开闭原则:引入新产品类型无需修改客户端代码
缺点:
- 需要引入许多新的子类,可能增加代码复杂度
- 在抽象层中引入了依赖性
应用场景
- 当类不知道它需要创建哪些具体对象时
- 当类希望其子类指定它创建的对象时
- 当需要解耦产品创建逻辑和使用逻辑时
与抽象工厂的关系
- 工厂方法通常作为抽象工厂的一部分实现
- 抽象工厂使用多个工厂方法创建相关产品族
- 工厂方法专注于创建单一产品