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("日志记录开始!");
    }
}

🆚 与简单工厂的区别

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

🧩 优点

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

⚠️ 缺点

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

✅ 使用建议

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

相关推荐
马猴烧酒.2 分钟前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
sino爱学习38 分钟前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
风生u1 小时前
activiti7 详解
java
岁岁种桃花儿1 小时前
SpringCloud从入门到上天:Nacos做微服务注册中心(二)
java·spring cloud·微服务
Word码1 小时前
[C++语法] 继承 (用法详解)
java·jvm·c++
TT哇1 小时前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
逝水如流年轻往返染尘2 小时前
Java中的数组
java
java1234_小锋2 小时前
Java高频面试题:BIO、NIO、AIO有什么区别?
java·面试·nio
用户8307196840822 小时前
Java IO三大模型(BIO/NIO/AIO)超详细总结
java
sheji34162 小时前
【开题答辩全过程】以 基于SSM的花店销售管理系统为例,包含答辩的问题和答案
java