Java 工厂方法模式(Factory Method Pattern)详解
???? 什么是工厂方法模式?
工厂方法模式是一种创建型设计模式,定义一个创建对象的接口,让子类决定实例化哪一个类。
它让类的实例化推迟到子类进行,实现了代码解耦与可扩展性增强。
???? 使用场景
- 不知道对象的具体类型时
- 需要将对象的创建与使用解耦
- 代码需要遵循开闭原则,便于扩展新产品
????️ 模式结构
- Product(抽象产品类)
- ConcreteProduct(具体产品类)
- Factory(抽象工厂类)
- ConcreteFactory(具体工厂类)
✅ 示例:创建不同类型的日志类
抽象产品接口
public interface Logger {
void log(String message);
}
具体产品实现
public class FileLogger implements Logger {
public void log(String message) {
System.out.println("File log: " + message);
}
}
public class ConsoleLogger implements Logger {
public void log(String message) {
System.out.println("Console log: " + message);
}
}
抽象工厂
public interface LoggerFactory {
Logger createLogger();
}
具体工厂类
public class FileLoggerFactory implements LoggerFactory {
public Logger createLogger() {
return new FileLogger();
}
}
public class ConsoleLoggerFactory implements LoggerFactory {
public Logger createLogger() {
return new ConsoleLogger();
}
}
客户端调用
public class Client {
public static void main(String[] args) {
LoggerFactory factory = new FileLoggerFactory(); // 可替换为 ConsoleLoggerFactory
Logger logger = factory.createLogger();
logger.log("日志记录开始!");
}
}
???? 与简单工厂的区别
简单工厂 | 工厂方法模式 |
---|---|
由一个工厂类创建所有产品 | 每个产品对应一个具体工厂类 |
不符合开闭原则 | 符合开闭原则 |
添加新产品需要改工厂类 | 添加新产品只需新增工厂子类 |
???? 优点
- 符合开闭原则,增加新产品不用修改已有代码
- 封装具体产品的创建逻辑,降低耦合
- 更灵活,易于扩展
⚠️ 缺点
- 类的数量增加,每新增一个产品就需要增加一个工厂类
- 增加系统复杂度
✅ 使用建议
当你需要将对象创建过程从客户端中抽离出来,且可能会新增新类型产品时,使用工厂方法模式是最佳选择。