java 工厂模式

## 一、什么是工厂模式?

**工厂模式(Factory Pattern)** 是一种创建型设计模式,主要用于将对象的创建和使用分离。它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式让一个类的实例化延迟到其子类。

### 主要作用
- 解耦对象的创建和使用
- 便于扩展和维护
- 提高代码的灵活性和可复用性

---

## 二、工厂模式的分类

1. **简单工厂模式(Simple Factory)**  
   由一个工厂类根据参数决定创建哪一种产品类的实例。

2. **工厂方法模式(Factory Method)**  
   定义一个创建对象的接口,让子类决定实例化哪一个类。

3. **抽象工厂模式(Abstract Factory)**  
   提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

---

## 三、简单代码示例

### 1. 简单工厂模式

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

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

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

// 工厂类
public class SimpleFactory {
    public static Product createProduct(String type) {
        if ("A".equals(type)) {
            return new ProductA();
        } else if ("B".equals(type)) {
            return new ProductB();
        }
        throw new IllegalArgumentException("未知产品类型");
    }
}

// 使用
public class Client {
    public static void main(String[] args) {
        Product product = SimpleFactory.createProduct("A");
        product.use();
    }
}
```

### 2. 工厂方法模式

```java
// 工厂接口
public interface Factory {
    Product createProduct();
}

// 具体工厂A
public class FactoryA implements Factory {
    public Product createProduct() {
        return new ProductA();
    }
}

// 具体工厂B
public class FactoryB implements Factory {
    public Product createProduct() {
        return new ProductB();
    }
}

// 使用
public class Client {
    public static void main(String[] args) {
        Factory factory = new FactoryA();
        Product product = factory.createProduct();
        product.use();
    }
}
```

---

## 四、工厂模式和Spring的关系

在Spring框架中,**IoC容器**本质上就是一个超级工厂。  
你在类上加上`@Component`、`@Service`等注解,Spring会自动帮你创建对象并管理它们的生命周期,这就是工厂模式的应用。

比如你上面代码中的这段:

```java
@Autowired
private SpringValidatorAdapter validatorAdapter;
```
Spring会自动帮你创建`SpringValidatorAdapter`对象并注入,这就是工厂模式的实际应用。

---

## 五、工厂模式的优缺点

**优点:**
- 解耦对象的创建和使用
- 易于扩展,新增产品只需增加工厂和产品类
- 代码结构清晰

**缺点:**
- 增加了系统的复杂度
- 需要额外的工厂类

---

## 六、总结

- 工厂模式是最常用的设计模式之一,广泛应用于各种框架和中间件(如Spring、MyBatis等)。
- 它让对象的创建更加灵活,便于维护和扩展。
- 在实际开发中,推荐优先使用Spring的依赖注入(IoC),它已经帮你实现了工厂模式的所有功能。
posted @ 2025-06-14 14:16  予真  阅读(33)  评论(0)    收藏  举报