知识卡片
增加父节点引用支持反向遍历
内容
[[组合模式的定义与三个角色]]的基础实现只支持从根节点往下遍历,若要反过来找上级,需给 抽象构件新增parent字段,添加子节点时同步设置反向引用。这样每个节点都持有指向直接上级的 引用,向上查找只需沿parent回溯。发散:这是”双向链表vs单向链表”思路在树结构上的应用—— 业务需要反向查询就该在设计阶段主动补上反向引用,而非每次查询都全树搜索。
参考来源
- 位置:《设计模式之禅(第2版)》第21章《组合模式》(源文件:_epub-src/text/part0098.html)
- 结论依据:原文给Corp类新增parent字段及setParent/getParent方法,并在Branch的addSubordinate方法中新增`corp.setParent(this)`,说明"甭管是树枝节点还是树叶节点,在每个节点都增加了一个属性:父节点对象……有了这个parent属性,什么后序遍历(从下往上找)、中序遍历……都解决了"。
- 原始内容:在Corp类中增加了两个方法,setParent是设置父节点是谁,getParent是查找父节点是谁……甭管是树枝节点还是树叶节点,在每个节点都增加了一个属性:父节点对象……有了这个parent属性,什么后序遍历(从下往上找)、中序遍历(从中间某个环节往上或往下遍历)都解决了。