Java工厂模式分析:三种实现与最佳实践

[复制链接]
发表于 2025-9-20 01:49:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
精心整理了最新的口试资料和简历模板,有须要的可以自行获取

点击前往百度网盘获取
点击前往夸克网盘获取

一、模式概述

工厂模式(Factory Pattern)是创建型筹划模式中最常用的模式之一,其焦点头脑是通过工厂类封装对象的创建过程,实现创建逻辑与使用逻辑的解耦。根据抽象水平差别,工厂模式可分为三种范例实现:

  • 简单工厂模式(静态工厂)
  • 工厂方法模式(多态工厂)
  • 抽象工厂模式(产品族工厂)
二、简单工厂模式

实当代码

  1. // 产品接口
  2. interface Notification {
  3.     void send();
  4. }
  5. // 具体产品
  6. class SMSNotification implements Notification {
  7.     @Override
  8.     public void send() {
  9.         System.out.println("Sending SMS notification");
  10.     }
  11. }
  12. class EmailNotification implements Notification {
  13.     @Override
  14.     public void send() {
  15.         System.out.println("Sending Email notification");
  16.     }
  17. }
  18. // 简单工厂
  19. class NotificationFactory {
  20.     public static Notification createNotification(String type) {
  21.         switch (type.toLowerCase()) {
  22.             case "sms": return new SMSNotification();
  23.             case "email": return new EmailNotification();
  24.             default: throw new IllegalArgumentException("Invalid type");
  25.         }
  26.     }
  27. }
  28. // 使用示例
  29. public class Client {
  30.     public static void main(String[] args) {
  31.         Notification sms = NotificationFactory.createNotification("sms");
  32.         sms.send(); // Output: Sending SMS notification
  33.     }
  34. }
复制代码
特点分析



  • 长处:快速实现对象创建逻辑的会集管理
  • 缺点:违背开闭原则,新增产品范例须要修改工厂类
  • 实用场景:产品范例较少且不频仍变革的场景
三、工厂方法模式

类结构

  1. // 抽象创建者
  2. abstract class NotificationCreator {
  3.     public abstract Notification createNotification();
  4.    
  5.     public void sendNotification() {
  6.         Notification notification = createNotification();
  7.         notification.send();
  8.     }
  9. }
  10. // 具体创建者
  11. class SMSNotificationCreator extends NotificationCreator {
  12.     @Override
  13.     public Notification createNotification() {
  14.         return new SMSNotification();
  15.     }
  16. }
  17. class EmailNotificationCreator extends NotificationCreator {
  18.     @Override
  19.     public Notification createNotification() {
  20.         return new EmailNotification();
  21.     }
  22. }
复制代码
优势对比


  • 符合开闭原则:新增产品只需添加新工厂类
  • 实现多态:通过继续体系实现差别的创建逻辑
  • 更易扩展:支持产品创建的复杂初始化过程
四、抽象工厂模式

产品族实现

  1. // 抽象工厂
  2. interface GUIFactory {
  3.     Button createButton();
  4.     Menu createMenu();
  5. }
  6. // 具体工厂
  7. class WindowsFactory implements GUIFactory {
  8.     public Button createButton() {
  9.         return new WindowsButton();
  10.     }
  11.    
  12.     public Menu createMenu() {
  13.         return new WindowsMenu();
  14.     }
  15. }
  16. class MacOSFactory implements GUIFactory {
  17.     public Button createButton() {
  18.         return new MacOSButton();
  19.     }
  20.    
  21.     public Menu createMenu() {
  22.         return new MacOSMenu();
  23.     }
  24. }
复制代码
焦点特性



  • 创建对象眷属而非单个产品
  • 保证产品之间的兼容性
  • 更适当复杂系统的根本办法建立
五、模式对比与应用场景

模式范例创建目的扩展方向范例应用场景简单工厂单一产品修改工厂类设置驱动的对象创建工厂方法单一产品增长子类框架组件初始化抽象工厂产品族增长接口实现跨平台UI组件库六、实际应用案例


  • Spring框架:BeanFactory和ApplicationContext
  • 日志日志框架:LoggerFactory创建差别日志日志录现
  • JDBC驱动:DriverManager获取数据库毗连
七、最佳实践发起


  • 优先使用工厂方法模式保证扩展性
  • 当存在产品族需求时升级到抽象工厂
  • 共同单例模式优化工厂实例创建
  • 使用罗列范例强化简单工厂的范例安全
  1. // 枚举优化示例
  2. enum NotificationType {
  3.     SMS(SMSNotification::new),
  4.     EMAIL(EmailNotification::new);
  5.     private final Supplier<Notification> constructor;
  6.     NotificationType(Supplier<Notification> constructor) {
  7.         this.constructor = constructor;
  8.     }
  9.     public Notification create() {
  10.         return constructor.get();
  11.     }
  12. }
复制代码
八、总结

工厂模式通过封装对象创建过程,有效低落了系统的耦合度。在实际开辟中:


  • 80%的场景可以使用工厂方法模式办理
  • 15%的复杂场景须要抽象工厂模式
  • 5%的简单场景可接纳简单工厂模式
正确使用工厂模式可以使代码更符合SOLID原则,特别是在大型项目和维护周期长的系统中,其优势会更加显着。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表