如何使用复合模式访问特定叶子?

时间:2011-03-10 01:57:28

标签: java design-patterns

如果我想访问Composite节点的第七七七叶,并且只访问该叶子,那么复合模式是可能的,还是该模式域外的那种访问?

1 个答案:

答案 0 :(得分:1)

我假设你在谈论Composite design pattern。该模式的一般版本不允许您直接跳到叶子,因此您必须递归地遍历子项。在伪代码中:

stack = []
stack.push(rootElement)
results = []

while(stack is not empty) {
  elt = stack.pop()
  if (elt.is_leaf()) {
    results.push(elt)
  }
  else { // not a leaf: add children to the stack
    for (c in elt.children()) {
      stack.push(c)
    }
  }
}

此时,您可以访问results的第77个元素以获得第77个叶子,在“您发现的第一个”命令中进行测量。请记住,一般来说,除非您准确说明您的订购标准是什么,否则只说“第77片叶子”并不是很有意义。