Skip to content

工厂方法

更新: 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();
    }
}

优缺点

优点:

  1. 避免创建者和具体产品之间的紧密耦合
  2. 单一职责原则:产品创建代码集中在单一位置
  3. 开闭原则:引入新产品类型无需修改客户端代码

缺点:

  1. 需要引入许多新的子类,可能增加代码复杂度
  2. 在抽象层中引入了依赖性

应用场景

  1. 当类不知道它需要创建哪些具体对象时
  2. 当类希望其子类指定它创建的对象时
  3. 当需要解耦产品创建逻辑和使用逻辑时

与抽象工厂的关系

  • 工厂方法通常作为抽象工厂的一部分实现
  • 抽象工厂使用多个工厂方法创建相关产品族
  • 工厂方法专注于创建单一产品

贡献者

The avatar of contributor named as LI SIR LI SIR
The avatar of contributor named as wkwbk wkwbk

页面历史