当前位置: 首页 > 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.hskmm.com/?act=detail&tid=27621

相关文章:

  • 骄傲 雨伞边缘处的暗槽 从最原初裂缝开凿 被碰触和温暖击倒 停止思考
  • 1.1.1.2 直接融资vs间接融资的区别
  • 柳高国庆小小说创作比赛的构思和成文(未完成)
  • 骄傲 孔雀羽翎上的暗槽 从最肮脏裂缝开凿 被爱意和现实击倒 停止创造
  • 10.9 CSP-S模拟28 改题记录
  • 所以相信我初登场 不会让任何人失望 无论地位不管成败 全都逃不出神的覆掌
  • 被彼此笼罩 任歌声将我们缠绕 立下誓言后再自嘲 重复仲夏夜的舞蹈 吞下这毒药
  • 朝圣显像 不及那人将门扉轻轻叩响 欢迎来到我的城市 嗅玫瑰绽放
  • Git克隆项目运行指南
  • webpack library - 指南
  • 2025.10.9 月考游寄 - Amy
  • 被彼此笼罩 任回忆将我们缠绕 狂欢者戴上了镣铐 得益者撕裂了嘴角 吞下这毒药
  • QGIS导出TIF栅格图层
  • 七层协议
  • 20251009
  • 单调栈
  • 各种B站客户端
  • 10.9正式恢复
  • CSP-S模拟27
  • 模型训练技巧 - -一叶知秋
  • 20232324 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 2025.10.8 训练记录
  • P3387 【模板】缩点 tarjan
  • 构建高效AI代理的完整指南:从基础组件到生产级工作流
  • 灵感本位审计框架:为创造性AI建立直达真相的信任机制——Ai元人文
  • 2025学校家具定制厂家最新推荐榜:书包柜,图书架,宿舍配套上下床,书桌等类型全覆盖,专业设计与安全品质深度解析
  • 【每日一面】盒子模型
  • 日总结 9
  • 为什么没有做出题目喵?
  • 杂题选做