全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-11 5 分钟 ✍️ juanwangdev

Java工厂模式

工厂模式将对象创建与使用分离,降低耦合度。

模式定义

意图:定义创建对象的接口,让子类决定创建哪个类。

三种工厂模式

类型特点
简单工厂一个工厂创建多种产品
工厂方法每种产品一个工厂
抽象工厂创建产品族

简单工厂

产品接口

Java
public interface Product {
    void use();
}

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

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

工厂实现

Java
public class SimpleFactory {
    public static Product create(String type) {
        switch (type) {
            case "A":
                return new ProductA();
            case "B":
                return new ProductB();
            default:
                throw new IllegalArgumentException("未知产品类型");
        }
    }
}

// 使用
Product product = SimpleFactory.create("A");
product.use();

优点:简单易用 缺点:新增产品需修改工厂,违反开闭原则

工厂方法模式

工厂接口

Java
public interface Factory {
    Product create();
}

具体工厂

Java
public class FactoryA implements Factory {
    @Override
    public Product create() {
        return new ProductA();
    }
}

public class FactoryB implements Factory {
    @Override
    public Product create() {
        return new ProductB();
    }
}

使用

Java
Factory factory = new FactoryA();
Product product = factory.create();
product.use();

优点:新增产品只需新增工厂,符合开闭原则 缺点:类数量增加

实际应用示例

Java
// 日志记录器工厂
public interface Logger {
    void log(String message);
}

public class FileLogger implements Logger {
    @Override
    public void log(String message) {
        System.out.println("文件日志: " + message);
    }
}

public class ConsoleLogger implements Logger {
    @Override
    public void log(String message) {
        System.out.println("控制台日志: " + message);
    }
}

public interface LoggerFactory {
    Logger createLogger();
}

public class FileLoggerFactory implements LoggerFactory {
    @Override
    public Logger createLogger() {
        return new FileLogger();
    }
}

public class ConsoleLoggerFactory implements LoggerFactory {
    @Override
    public Logger createLogger() {
        return new ConsoleLogger();
    }
}

// 使用
LoggerFactory factory = new FileLoggerFactory();
Logger logger = factory.createLogger();
logger.log("系统启动");

Spring中的工厂模式

Spring的BeanFactory就是工厂模式的典型应用:

Java
BeanFactory beanFactory = new ClassPathXmlApplicationContext("beans.xml");
UserService userService = (UserService) beanFactory.getBean("userService");

工厂模式适用场景

  1. 创建对象逻辑复杂
  2. 需要解耦对象创建和使用
  3. 产品类型可能扩展
  4. 需要灵活切换产品

简单工厂 vs 工厂方法

特性简单工厂工厂方法
工厂数量1个多个
扩展性修改工厂新增工厂
复杂度简单略复杂
符合开闭

注意事项

产品需有共同接口或父类

工厂方法模式类数量会增加

简单工厂适合产品固定的场景

工厂方法适合产品可能扩展的场景

要点总结

  1. 工厂模式将创建逻辑封装,实现创建与使用解耦
  2. 简单工厂:一个工厂创建多种产品,简单但扩展性差
  3. 工厂方法:每种产品一个工厂,符合开闭原则
  4. 产品需有共同接口,工厂返回接口类型
  5. Spring的BeanFactory是工厂模式的经典应用

📝 发现内容有误?点击此处直接编辑

← 上一篇 Java外观模式
下一篇 → Java建造者模式
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库