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

深入浅出工厂模式:从入门到精通(2025最新版)

一、什么是工厂模式?

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。简单来说,​​工厂模式就像现实生活中的工厂一样​​,专门负责"生产产品"(即创建对象),让使用者不用关心对象是怎么被创建出来的。

1.1 工厂模式的三大核心优势

  1. ​隐藏创建细节​​:就像你买手机不用关心零件怎么组装的
  2. ​统一创建入口​​:所有同类型产品都从一个地方产出
  3. ​灵活替换产品​​:换个工厂就能生产不同产品,使用者代码不用改

二、工厂模式的三种类型

2.1 简单工厂模式(静态工厂)

​适用场景​​:产品种类较少且不常变化

// 产品接口
public interface IPhone {void Call();
}// 具体产品
public class XiaomiPhone implements IPhone { /* 实现 */ }
public class HuaweiPhone implements IPhone { /* 实现 */ }// 手机工厂
public static class PhoneFactory {public static IPhone CreatePhone(String brand) {return brand switch {"Xiaomi" -> new XiaomiPhone(),"Huawei" -> new HuaweiPhone(),_ -> throw new ArgumentException("不支持的品牌")};}
}// 使用
var myPhone = PhoneFactory.CreatePhone("Xiaomi");
myPhone.Call();

2.2 工厂方法模式

​适用场景​​:

  • 需要支持新产品扩展
  • 不同产品创建逻辑差异较大
// 抽象工厂
public interface IPhoneFactory {IPhone CreatePhone();
}// 具体工厂
public class XiaomiFactory implements IPhoneFactory { /* 实现 */ }
public class HuaweiFactory implements IPhoneFactory { /* 实现 */ }// 使用
IPhoneFactory factory = new XiaomiFactory();
var phone = factory.CreatePhone();

2.3 抽象工厂模式

​适用场景​​:

  • 需要创建成套的相关产品
  • 保证产品兼容性(比如都用小米生态)
// 产品族接口
public interface IDeviceFactory {IPhone CreatePhone();ITablet CreateTablet();
}// 小米工厂
public class XiaomiFactory implements IDeviceFactory { /* 实现所有小米产品 */ 
}// 使用
IDeviceFactory factory = new XiaomiFactory();
var phone = factory.CreatePhone();
var tablet = factory.CreateTablet();

三、工厂模式实战案例

3.1 数据库连接工厂

public interface IDbConnectionFactory {IDbConnection CreateConnection();
}// SQL Server实现
public class SqlConnectionFactory implements IDbConnectionFactory {public IDbConnection CreateConnection() {return new SqlConnection("Server=...");}
}// 使用时不关心具体数据库类型
IDbConnectionFactory factory = new SqlConnectionFactory();
using var connection = factory.CreateConnection();

3.2 日志记录器工厂

public interface ILoggerFactory {ILogger CreateLogger();
}// 文件日志实现
public class FileLoggerFactory implements ILoggerFactory {public ILogger CreateLogger() {return new FileLogger("log.txt");}
}

四、工厂模式深度解析

4.1 与传统创建方式的对比

传统方式:

Sample sample = new Sample();

工厂模式:

public class Factory {public static ISample creator(int which) {if (which==1) return new SampleA();else if (which==2) return new SampleB();}
}ISample sampleA = Factory.creator(1);

​优势​​:将创建实例的工作与使用实例的工作分开,降低耦合度

4.2 工厂模式思考

​优势​​:

  • 新增产品类型时,只需要扩展工厂,不用修改已有代码
  • 符合开闭原则(对扩展开放,对修改封闭)

​代价​​:

  • 需要多写一些工厂类和接口,代码量会增加
  • 对于简单场景,可以用依赖注入容器替代

五、最佳实践与常见误区

5.1 何时使用工厂模式?

  • 创建对象的过程复杂且需要隔离时
  • 需要动态地创建对象,且创建过程需要根据不同条件调整
  • 需要创建一系列相关对象,且这些对象之间的依赖关系需要保持一致

5.2 常见误区

  1. ​过度使用工厂模式​​:简单对象直接new即可
  2. ​违反单一职责原则​​:一个工厂类负责太多产品的创建
  3. ​忽略线程安全问题​​:多线程环境下需要考虑工厂的线程安全

六、总结

工厂模式就像现实中买家具可以直接去宜家(工厂),而不用自己找木匠、铁匠一样,它让对象创建变得更简单、更专业!

​关键点总结​​:

  1. 简单工厂适合产品种类少且固定的场景
  2. 工厂方法模式更符合开闭原则,扩展性好
  3. 抽象工厂模式适合创建产品族
http://www.xdnf.cn/news/12171.html

相关文章:

  • Linux多线程
  • java教程笔记(九)-异常处理,枚举类,反射机制,注解
  • 使用 Preetham 天空模型与硬边太阳圆盘实现真实感天空渲染
  • 益莱储参加 Keysight World 2025,助力科技加速创新
  • Python正则表达式re模块
  • 资产智慧管理安全监测中心
  • 【物联网-TCP/IP】
  • 【AI学习】KV-cache和page attention
  • 【机器学习】主成分分析 (PCA)
  • AIGC图像去噪:核心原理、算法实现与深度学习模型详解
  • C++课设:智能优惠快餐点餐系统
  • 新建网站部署流程
  • glibc 交叉编译
  • Ansys Maxwell:线圈和磁体的静磁 3D 分析
  • 深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(1)
  • USB-C/HDMI 2.0 2:1 SW,支持4K60HZ
  • 如何选择有效的CoT提示提升模型推理性能!
  • 在历史项目升级中用SSR和SSG优化性能的实现流程
  • em/px/rem/vh/vw区别
  • IBMS综合运维平台业务分析与BA楼宇自控系统技术架构与应用
  • Node事件循环机制详解
  • 【QQMusic】在LikePage点击取消喜欢没有反应
  • (LeetCode 每日一题) 1061. 按字典序排列最小的等效字符串 (并查集)
  • 双空间知识蒸馏用于大语言模型
  • Android 本地存储路径说明
  • 创客匠人解密创始人IP打造:知识变现的三大核心逻辑
  • 编程笔记---问题小计
  • 玄机——Linux等保测评
  • 游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程
  • 山东大学深度学习期末概念汇总