让我们假设我有一个节点集合,我稍后会在我的渲染器类中使用这些节点。然后我有一个可以访问节点或整个集合的访问者类。这很简单,因为我的节点集合只是 std::list 的包装器,几乎没有额外的方法。
问题是我希望节点有一个树状结构(而不是简单的列表),这样一个节点可以有一个父节点和 n 个子节点。这将很方便,因为我希望能够将一个节点传递给我的渲染器并渲染该节点“下方”的所有内容。答案可能是 Composite。
如何同时使用 Visitor 和 Composite?我读到它通常是一个很好的组合,但我的实现看起来很糟糕......我错过了什么。
最佳答案
我为我们的系统实现了一些非常相似的东西。我想要一种方法来组合几何对象的层次结构并将它们渲染到体积中。我使用复合模式来编写我的描述(根节点是节点,然后派生的子节点是复合节点(节点列表))。
CompositeNode 有接受访问者 (Visitor) 的方法 accept(),然后在 accept() 中执行 visitor->visit(this)。
因此,您的访问者层次结构具有基类 NodeVisitor 和派生访问者,例如 RenderVisitor(呈现对象)、ReportVisitor(将节点信息转储到文本中)。您的基类将需要接受基本和专用节点类型。
所以是的,组合有效,我有工作代码,但我同意设计比您在网上阅读的内容(Wiki 或玩具示例)需要更多的努力。
希望对你有帮助
关于c++ - 节点的迭代层次结构 - 访客和复合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/538856/