模式概述

简单工厂模式(Simple Factory Pattern)通过一个工厂类根据传入的参数来动态的创建不同类型对象,将对象的实例化与客户端代码解耦。属于创建型模式,适用于产品类型有限且不频繁变化的场景。

简单代码示例

// 1. 抽象产品接口
interface Product {
    void use();
}

// 2. 具体产品实现
class ConcreteProductA implements Product {
    @Override
    public void use() {
        System.out.println("Using Product A");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void use() {
        System.out.println("Using Product B");
    }
}

// 3. 简单工厂类
class SimpleFactory {
    public Product createProduct(String type) {
        if ("A".equalsIgnoreCase(type)) {
            return new ConcreteProductA();
        } else if ("B".equalsIgnoreCase(type)) {
            return new ConcreteProductB();
        }
        throw new IllegalArgumentException("Invalid product type: " + type);
    }
}

// 4. 使用示例
public class Test{
    public static void main(String[] args) {
        SimpleFactory factory = new SimpleFactory();
        
        // 创建产品A
        Product productA = factory.createProduct("A");
        productA.use();  // 输出: Using Product A
        
        // 创建产品B
        Product productB = factory.createProduct("B");
        productB.use();  // 输出: Using Product B
    }
}

技术细节

1.模式组成

组件 职责说明
Product 抽象产品接口,定义产品的公共方法(如 use())
ConcreteProductA/B 具体产品类,实现产品接口的业务逻辑
SimpleFactory 工厂类,根据输入参数创建对应的产品实例

2.优点与缺点

优点:

  • 解耦工厂和具体产品类
  • 集中化对象创建逻辑,便于维护
  • 符合单一职责原则

缺点:

  • 违反开闭原则(新增产品需修改工厂类)
  • 静态类没有办法被继承
  • 工厂类职责过重,产品过多时逻辑复杂

模式应用

JDK中很多地方使用了简单工厂模式,例如工具类java.text.DateFormat、Java加密技术等

扩展建议

  1. 配置文件扩展:通过读取配置文件实现产品类型的动态配置。
  2. 枚举优化:使用枚举类型替代字符串参数或者枚举中配置参数。
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐