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

发布于 2024-10-21 07:03:18 字数 72 浏览 1 评论 0原文

如果我想访问复合节点的第七百七十七个叶子,并且只访问该叶子,那么使用复合模式是否可以实现这一点,或者这种访问类型是否在模式域之外?

If I wanted to access the seven hundredth and seventy seventh leaf of a Composite node, and only access that leaf, is that possible with the Composite Pattern, or is that type of access outside the domain of the pattern?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笔落惊风雨 2024-10-28 07:03:18

我假设您正在谈论复合设计模式。该模式的一般版本不允许您直接跳到叶子,因此您必须递归地遍历子级。用伪代码表示:

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 片叶子”并没有多大意义,除非您准确说明了排序标准。

I'm assuming you're talking about the Composite design pattern. The general version of that pattern does not let you skip directly to leaves, so you'll have to walk the children recursively. In pseudocode:

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)
    }
  }
}

At that point, you can access the 77th element of results to get the 77th leaf, as measured in 'children you found out about first' order. Keep in mind that, in general, just saying 'the 77th leaf' is not very meaningful unless you give a precise account of what your ordering criterion is.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文