0

有关此问题的上下文;我们构建了以下数据结构(示例)

Book
  - Table of Contents
  - Chapter
      - Chapter Title
      - Pages
          - Paragraphs
          - Page Number

这个结构是使用复合模式构建的;我们还在数据库表中有数据(文本元数据和媒体信息),这些数据由访问者分配给树中的每个对象。

现在的想法是我想验证结构;但这必须从叶节点向上完成;

即验证页面是否有段落和页码来验证页面;如果是这样,那么可以验证章节等等。

我陷入了困境,因为访问者模式从数据结构中抽象出算法;因此不可能将返回值直接添加到我用来遍历树的方法中;并且添加另一种方法来做类似的工作是没有意义的;这是 CompositeObject 上的方法,它允许访问者遍历树:

/**
 * Accept Visitor
 * @param  ObjectTree_Visitor_Interface $visitor
 * @return void
 */
public function acceptVisitor(ObjectTree_Visitor_Interface $visitor) {
    $visitor->visit($this); 
    if(count($this->objects) > 0) {
        foreach($this->objects as $object) {
            $object->acceptVisitor($visitor);
        }
    }
}

关于我可以用来遍历这个结构的替代方法的任何想法?

4

0 回答 0