有关此问题的上下文;我们构建了以下数据结构(示例)
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);
}
}
}
关于我可以用来遍历这个结构的替代方法的任何想法?