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

🆚 与简单工厂的区别

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

🧩 优点

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

⚠️ 缺点

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

✅ 使用建议

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

相关推荐
ZZHow10243 小时前
JavaWeb开发_Day05
java·笔记·web
CHEN5_023 小时前
【Java虚拟机】垃圾回收机制
java·开发语言·jvm
Warren983 小时前
Lua 脚本在 Redis 中的应用
java·前端·网络·vue.js·redis·junit·lua
饕餮争锋5 小时前
设计模式笔记_行为型_观察者模式
笔记·观察者模式·设计模式
艾伦~耶格尔7 小时前
【数据结构进阶】
java·开发语言·数据结构·学习·面试
爪洼传承人7 小时前
18- 网络编程
java·网络编程
smileNicky7 小时前
SpringBoot系列之从繁琐配置到一键启动之旅
java·spring boot·后端
祈祷苍天赐我java之术7 小时前
Java 迭代器(Iterator)详解
java·开发语言
David爱编程8 小时前
为什么必须学并发编程?一文带你看懂从单线程到多线程的演进史
java·后端
我命由我123458 小时前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js