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

软件工程学习日志2025.10.9

📝 今日学习主题

简单工厂模式(Simple Factory Pattern) 在实际场景中的应用

🎯 模式理解

简单工厂模式属于创建型模式,它提供了一个统一的接口来创建不同类型的对象,而无需向客户端暴露实例化的逻辑。

核心思想

• 封装变化:将对象创建的过程封装起来

• 解耦:客户端与具体产品类解耦

• 单一职责:工厂类专注于对象创建

💻 代码实践回顾

类结构设计

// 抽象产品类
public abstract class Person {
public abstract void display();
}

// 具体产品类
public class Man extends Person { /* 实现略 / }
public class Woman extends Person { /
实现略 / }
public class Robot extends Person { /
实现略 */ }

// 工厂类
public class Nvwa {
public static Person createPerson(String type) {
// 根据类型创建具体对象
}
}

🔍 模式优势分析

  1. 降低耦合度

客户端只需要知道产品类型标识符,无需关心具体创建细节:
// 客户端代码简洁清晰
Person person = Nvwa.createPerson("M");
person.display();

  1. 易于扩展

新增产品类型时,只需要:
• 添加新的产品类

• 修改工厂类的创建逻辑

• 客户端代码无需改动

  1. 集中化管理

所有对象的创建逻辑集中在工厂类中,便于统一管理和维护。

⚠️ 局限性思考

存在的问题

  1. 违反开闭原则:新增产品类型需要修改工厂类
  2. 工厂类职责过重:所有产品创建逻辑集中在一个类中
  3. 类型判断复杂:产品类型增多时,switch/case或if/else会变得冗长

🚀 改进方向

方案1:使用反射机制

public class Nvwa {
public static Person createPerson(String type) {
try {
Class<?> clazz = Class.forName("com.example." + getClassName(type));
return (Person) clazz.newInstance();
} catch (Exception e) {
throw new IllegalArgumentException("无效类型");
}
}
}

方案2:配置化工厂

// 通过配置文件映射类型与类名
@Configuration
public class PersonConfig {
@Bean
public Map<String, Class<? extends Person>> personMap() {
Map<String, Class<? extends Person>> map = new HashMap<>();
map.put("M", Man.class);
map.put("W", Woman.class);
map.put("R", Robot.class);
return map;
}
}

💡 实际应用场景

适合使用简单工厂模式的场景:

  1. 对象创建逻辑相对简单
  2. 产品类型数量有限
  3. 不需要频繁扩展新产品
  4. 客户端不关心创建细节

实际项目中的类似应用:

• 数据库连接工厂(MySQL、Oracle、SQL Server)

• 日志记录器工厂(FileLogger、ConsoleLogger)

• 文档解析器工厂(PDFParser、WordParser)

📊 学习收获总结

方面 收获

设计原则 加深了对封装变化、单一职责原则的理解

编码规范 实践了清晰的类分层和命名规范

模式认知 明确了简单工厂模式的适用边界

扩展思考 认识到模式局限性及改进方向

http://www.jsqmd.com/news/10789/

相关文章:

  • 骄傲 雨伞边缘处的暗槽 从最原初裂缝开凿 被碰触和温暖击倒 停止思考
  • 1.1.1.2 直接融资vs间接融资的区别
  • 柳高国庆小小说创作比赛的构思和成文(未完成)
  • 被彼此笼罩 任歌声将我们缠绕 立下誓言后再自嘲 重复仲夏夜的舞蹈 吞下这毒药
  • 朝圣显像 不及那人将门扉轻轻叩响 欢迎来到我的城市 嗅玫瑰绽放
  • 分布式锁的 Java 实现与性能对比:从实战落地到选型指南(一) - 指南
  • Git克隆项目运行指南
  • webpack library - 指南
  • 2025.10.9 月考游寄 - Amy
  • 被彼此笼罩 任回忆将我们缠绕 狂欢者戴上了镣铐 得益者撕裂了嘴角 吞下这毒药
  • QGIS导出TIF栅格图层
  • OpenCV——批量读取可视化图片 - 指南
  • 七层协议
  • 20251009
  • 各种B站客户端
  • 10.9正式恢复
  • CSP-S模拟27
  • 模型训练技巧 - -一叶知秋
  • 20232324 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 2025.10.8 训练记录
  • 【触想智能】工业一体机在金融领域的应用优势和具体注意事项 - 指南
  • 汽车行业AI视觉检测方案(三):引领轮胎智检 - 实践
  • WPF mvvm datagrid export as pdf via iTextSharp
  • 【每日一面】盒子模型
  • 日总结 9
  • kettle插件-国产数据库瀚高插件,助力国产数据库腾飞
  • ai 对话框一直往下滚可能要成为过云,当初只是为了快速现实ai的演示界面而己,是该走入正题 了
  • 脚手架安全巡检智能化!AI 让隐患识别更精准、整改更高效
  • 实用指南:provthrd.dll propsys.dll profsvc.dll profprov.dll procinst.dll prntvpt.dll prnntfy.dll
  • 37 ACwing 298 Fence 题解