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

软件工程学习日志2025.12.25

📖 学习主题:软件工程23种设计模式的核心理念、作用与实践

🎯 一、今日学习目标

  1. 理解23种设计模式的分类与核心理念
  2. 掌握每种模式的主要作用和适用场景
  3. 通过代码示例加深对模式实现方式的理解
  4. 建立设计模式的知识框架和应用思路

📚 二、核心内容总结

  1. 模式分类总览

类别 模式数量 核心目标 关键特点

创建型 5种 对象创建的抽象 解耦创建过程,提升灵活性

结构型 7种 对象/类的组合与适配 优化系统结构,降低耦合

行为型 11种 对象间的交互与职责分配 优化通信流程,简化控制

  1. 重点模式深入理解

🔹 工厂方法模式 vs 抽象工厂模式

• 相同点:都用于创建对象,解耦客户端与具体类

• 不同点:

• 工厂方法:创建单个产品

• 抽象工厂:创建产品族,保证兼容性

🔹 装饰器模式 vs 代理模式

• 相同点:都包装现有对象

• 不同点:

• 装饰器:增强功能,透明性(客户端知道被包装对象)

• 代理:控制访问,非透明性(客户端不知道被代理对象)

🔹 策略模式 vs 状态模式

• 相同点:都通过组合改变行为

• 不同点:

• 策略:算法可互换,客户端主动选择

• 状态:状态驱动行为,自动转换

💻 三、代码实践要点

创建型模式实践

// 单例模式的双重检查锁定
public class Singleton {
private static volatile Singleton instance;

public static Singleton getInstance() {if (instance == null) {  // 第一次检查synchronized (Singleton.class) {if (instance == null) {  // 第二次检查instance = new Singleton();}}}return instance;
}

}

结构型模式实践

// 装饰器模式实现
public abstract class CoffeeDecorator extends Coffee {
protected Coffee decoratedCoffee;

public CoffeeDecorator(Coffee coffee) {this.decoratedCoffee = coffee;
}

}

行为型模式实践

// 观察者模式实现
public class WeatherStation implements Subject {
private List observers = new ArrayList<>();

public void registerObserver(Observer o) {observers.add(o);
}public void notifyObservers() {for (Observer o : observers) {o.update(temperature, humidity, pressure);}
}

}

🧠 四、模式选择决策树

graph TD
A[设计问题] --> B{创建对象?}
B -->|是| C[创建型模式]
C --> D{需要控制实例数量?}
D -->|是| D1[单例模式]
D -->|否| D2{复杂对象?}
D2 -->|是| D3[建造者模式]
D2 -->|否| D4{产品族?}
D4 -->|是| D5[抽象工厂]
D4 -->|否| D6[工厂方法]

B -->|否| E{优化结构?}
E -->|是| F[结构型模式]
F --> F1{接口不匹配?}
F1 -->|是| F2[适配器模式]
F1 -->|否| F3{透明添加功能?}
F3 -->|是| F4[装饰器模式]
F3 -->|否| F5{控制访问?}
F5 -->|是| F6[代理模式]E -->|否| G[行为型模式]
G --> G1{多个对象交互?}
G1 -->|是| G2[中介者/观察者]
G1 -->|否| G3{算法可变?}
G3 -->|是| G4[策略模式]
G3 -->|否| G5{需要撤销?}
G5 -->|是| G6[备忘录/命令]

📊 五、学习心得与体会

✅ 已掌握内容

  1. 23种设计模式的分类和核心理念
  2. 每种模式的适用场景和优缺点
  3. 主要模式的实现方式
  4. 模式间的区别和联系

❌ 需要加强

  1. 实际项目中模式的组合使用
  2. 复杂场景下的模式选择
  3. 重构现有代码到设计模式的实践

💡 关键收获

  1. 设计模式是工具,不是目标:应根据实际问题选择合适的模式
  2. 简单优于复杂:不要为了使用模式而过度设计
  3. 理解优于记忆:掌握思想比记住实现更重要
  4. 组合使用:很多场景需要多种模式结合

🔄 六、常用模式速查表

常见问题 推荐模式 说明

对象创建复杂 工厂方法/建造者 封装创建逻辑

需要全局唯一实例 单例模式 控制资源访问

接口不兼容 适配器模式 复用旧代码

动态添加功能 装饰器模式 灵活扩展

对象间通信复杂 中介者模式 简化交互

需要撤销功能 备忘录模式 保存状态

事件通知机制 观察者模式 解耦发布订阅

算法可互换 策略模式 灵活切换

📈 七、实际应用思考

项目中的应用点

  1. 配置管理 → 单例模式
  2. 日志系统 → 观察者模式
  3. 数据解析 → 策略模式
  4. UI组件 → 组合模式
  5. 缓存系统 → 代理模式
  6. 工作流引擎 → 状态模式
  7. 插件系统 → 工厂方法

最佳实践原则

  1. KISS原则:能简单就不复杂
  2. YAGNI原则:不需要就不要做
  3. DRY原则:不要重复自己
  4. 优先使用组合:而非继承

🎯 八、下一步学习计划

短期目标(1周内)

  1. 每种模式实现一个实际小案例
  2. 阅读《设计模式:可复用面向对象软件的基础》相关章节
  3. 分析开源项目中设计模式的应用

中期目标(1个月内)

  1. 在个人项目中应用3-5种常用模式
  2. 学习反模式及其识别
  3. 掌握设计模式的演变和替代方案

实践项目建议

  1. 实现一个简单的电子商务系统,应用多种模式
  2. 重构现有的个人项目代码
  3. 参与开源项目,学习实际应用

📌 九、重点记忆要点

创建型模式(5个)

• 单例:全局唯一

• 工厂:解耦创建

• 抽象工厂:产品族

• 建造者:复杂构建

• 原型:克隆对象

结构型模式(7个)

• 适配器:接口转换

• 桥接:抽象实现分离

• 组合:树形结构

• 装饰器:动态增强

• 外观:简化接口

• 享元:共享对象

• 代理:控制访问

行为型模式(11个)

• 责任链:传递请求

• 命令:封装请求

• 解释器:解析语法

• 迭代器:顺序访问

• 中介者:集中交互

• 备忘录:保存状态

• 观察者:事件通知

• 状态:状态驱动行为

• 策略:算法互换

• 模板方法:定义骨架

• 访问者:分离操作

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

相关文章:

  • KAIST AI团队革命性突破:无需深度估计也能让视频自由变换视角
  • C语言——迷宫问题
  • 【光的偏振与光功率 / 能量测量学习笔记】
  • Spring AI Alibaba — ChatModel与ChatClient的联系与区别
  • 工程仿真、CFD 分析软件 Tecplot 2025 R1 超详细下载安装教程全流程指南:从下载到使用,新手也能看懂
  • 小小的SSL证书如何为您的业务带来大生意
  • 2025/12/22
  • LoPA:上海交大与华为联手破解AI推理新困境
  • 完整理解乐观锁(以预定系统为例)
  • 大模型流式输出Streaming Output
  • python学习笔记
  • C156D飞腾加固计算机在国产化计算体系中的应用定位
  • 手写数字识别(3种算法对比)
  • CRMEB WxJava,微信生态开发外挂来袭!
  • Perfecxion.ai发布:生产级安全编程数据集防范AI代码漏洞
  • 夸克网盘下载不限速_在线解析站
  • 别再把 K8s 当大号 Docker 了:我用 Kubernetes 跑数据任务踩过的那些坑
  • 前端架构演进之路——从网页到应用
  • 利用SAT求解优化量子电路映射
  • P3241 [HNOI2015] 开店
  • Shell 脚本
  • 不懂技术怕什么?陀螺匠低代码平台,拖拽之间搞定复杂数据关联
  • 夸克网盘不限速_在线公益解析站
  • 同步通信协议(I2C/SPI)驱动OLED/EEPROM/传感器实战
  • Chat2PDF 的最神级用法,其实是一键把 AI 对话变成干净高保真的 PDF - 实践
  • CRMEB 标准版系统(PHP)- 前端多语言开发指南
  • 午餐肉灌装机市场风向标:优质午餐肉生产厂家大公开,行业内评价好的灌装机公司博锐层层把关品质优 - 品牌推荐师
  • 高速斩拌机品牌权威测评,谁是行业真王者?搅拌机源头厂家精选实力品牌榜单发布 - 品牌推荐师
  • 当“同时发生”成为攻击武器
  • 学习《Transformer原理》读书报告