23种设计模式-创建型模式之工厂方法模式(Java版本)

Java 工厂方法模式(Factory Method Pattern)详解

🌟 什么是工厂方法模式?

工厂方法模式是一种创建型设计模式,定义一个创建对象的接口,让子类决定实例化哪一个类

它让类的实例化推迟到子类进行,实现了代码解耦与可扩展性增强


🧠 使用场景

  • 不知道对象的具体类型时
  • 需要将对象的创建与使用解耦
  • 代码需要遵循开闭原则,便于扩展新产品

🏗️ 模式结构

  • Product(抽象产品类)
  • ConcreteProduct(具体产品类)
  • Factory(抽象工厂类)
  • ConcreteFactory(具体工厂类)

✅ 示例:创建不同类型的日志类

抽象产品接口

java 复制代码
public interface Logger {
    void log(String message);
}

具体产品实现

java 复制代码
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);
    }
}

抽象工厂

java 复制代码
public interface LoggerFactory {
    Logger createLogger();
}

具体工厂类

java 复制代码
public class FileLoggerFactory implements LoggerFactory {
    public Logger createLogger() {
        return new FileLogger();
    }
}

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

客户端调用

java 复制代码
public class Client {
    public static void main(String[] args) {
        LoggerFactory factory = new FileLoggerFactory(); // 可替换为 ConsoleLoggerFactory
        Logger logger = factory.createLogger();
        logger.log("日志记录开始!");
    }
}

🆚 与简单工厂的区别

简单工厂 工厂方法模式
由一个工厂类创建所有产品 每个产品对应一个具体工厂类
不符合开闭原则 符合开闭原则
添加新产品需要改工厂类 添加新产品只需新增工厂子类

🧩 优点

  • 符合开闭原则,增加新产品不用修改已有代码
  • 封装具体产品的创建逻辑,降低耦合
  • 更灵活,易于扩展

⚠️ 缺点

  • 类的数量增加,每新增一个产品就需要增加一个工厂类
  • 增加系统复杂度

✅ 使用建议

当你需要将对象创建过程从客户端中抽离出来,且可能会新增新类型产品时,使用工厂方法模式是最佳选择

相关推荐
云姜.7 分钟前
线程和进程的关系
java·linux·jvm
是码龙不是码农8 分钟前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
曹牧9 分钟前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
heartbeat..9 分钟前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
WeiXiao_Hyy12 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇18 分钟前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
团子的二进制世界25 分钟前
G1垃圾收集器是如何工作的?
java·jvm·算法
long31630 分钟前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
rannn_1111 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
灵感菇_1 小时前
Java HashMap全面解析
java·开发语言