???? 引言:当数据结构遇到多变的操作需求
场景痛点:
假设你正在开发一个文件系统分析工具,需要支持以下功能:
- 统计文件夹大小
- 搜索特定文件类型
- 生成目录树结构图
如果直接在文件系统类中添加这些方法:
class File {
// 原有方法
void search() {
/* 实现搜索 */ }
void countSize() {
/* 实现统计 */ }
void drawTree() {
/* 实现绘图 */ }
}
问题暴露:
- 违反单一职责原则 ❌
- 新增功能需修改已有类 ❌
- 业务逻辑与数据结构强耦合 ❌
模式组合的价值:
- 解耦数据与操作:访问者封装各种处理逻辑
- 保持结构稳定:组合模式维护树形结构不变
- 无限扩展能力:新增操作只需添加访问者
???? 一、模式概念回顾
1.1 组合模式(Composite Pattern)
定义:将对象组合成树形结构以表示"部分-整体"层次结构,使得用户对单个对象和组合对象的使用具有一致性。
核心价值:统一处理简单元素和复杂元素。
1.2 访问者模式(Visitor Pattern)
定义:在不改变数据结构的前提下定义作用于这些元素的新操作。
核心价值:分离数据结构与数据操作。