当前位置: 首页 > web >正文

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

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(); // 可替换为 ConsoleLoggerFactoryLogger logger = factory.createLogger();logger.log("日志记录开始!");}
}

🆚 与简单工厂的区别

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

🧩 优点

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

⚠️ 缺点

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

✅ 使用建议

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

http://www.xdnf.cn/news/29.html

相关文章:

  • 科学护理进行性核上性麻痹,缓解病痛提升生活质量
  • 【Java学习笔记】键盘录入方法
  • GPU怎么绑定到服务器上
  • 20个常用的初级Java笔试题及其参考答案
  • 通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
  • Edge 浏览器推出 Copilot Vision:免费实时解析屏幕内容;Aqua Voice:极速 AI 语音输入工具丨日报
  • setTimeoutsetIntervalrequestAnimationFrame
  • FreeRTOS二值信号量详解与实战教程
  • 国内网络设备厂商名单(List of Domestic Network Equipment Manufacturers)
  • Python内置函数---all()
  • L2-033 简单计算器满分笔记
  • Vscode开发Vue项目NodeJs启动报错处理
  • 2025华中杯数学建模B题完整分析论文(共42页)(含模型、数据、可运行代码)
  • Linux环境基础开发工具使用
  • 「电商玩法」AI自动创作系统源码:商品图+视频+营销文案一键生成
  • 山东大学软件学院创新项目实训开发日志(17)之中医知识历史问答历史对话查看功能完善
  • [特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术
  • PclSharp ——pcl的c#nuget包
  • 【cocos creator 3.x】速通3d模型导入, 模型创建,阴影,材质使用,模型贴图绑定
  • 【AI插件开发】Notepad++ AI插件开发实践:实现对话窗口功能
  • 算法思想之分治-归并
  • 中间件--ClickHouse-7--冷热数据分离,解决Mysql海量数据瓶颈
  • 极狐GitLab CI/CD 流水线计算分钟数如何管理?
  • 《Java 并发编程实践》阅读笔记(一):线程重要性
  • 计算机网络基础概论
  • vue常见错误
  • Vue 组件化开发