深入理解组合模式与迭代器模式
1. 组合模式的运用与误用
组合模式允许我们构建任意深度的对象树,在树中可以将任何内部节点(组合)视为叶节点。有了父引用后,我们就能将任何组合组件追溯到其最终父组件,示例代码如下:
while task
puts("task: #{task}")
task = task.parent
end
在实现组合模式时,常见的错误是假设树只有一层深度,即认为组合对象的所有子组件实际上都是叶对象,而不是其他组合。例如,在计算烘焙蛋糕过程中涉及的基本步骤数量时,错误的实现如下:
# 错误的实现方式
class CompositeTask < Task
# 省略大量代码...
def total_number_basic_tasks
@sub_tasks.length
end
end
这种实现忽略了子任务本身可能是包含许多子子任务的大型组合。正确的处理方式是在组件类中定义 total_number_basic_tasks 方法:
class Task
# 省略大量代码...
def total_number_basic_tasks
1
end
end
然后在组合类中重写该方法以递归遍历树:
class C
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



