现在的位置: 首页 > 综合 > 正文

使用Visitor模式的现实问题(请教)

2011年04月16日 ⁄ 综合 ⁄ 共 620字 ⁄ 字号 评论关闭

选择放在首页一方面是希望更多的朋友可以帮助我,另一方面我觉得这个案例有一定的典型性。如果大家(特别是DUDU)认为不妥请告诉我,我撤下来。

背景:遍历一个图(有若干元素组成,每个元素称为一个Shape,元素之间由Connector相连)生成相应的XML文件。每个元素生成一段XML代码,最后组合在一起。单看背景部分,这是一个典型的外部收集方法的案例,使用Visitor模式也比较合适。
实现现状:使用Visitor模式(见下图),ObjectStructure负责遍历所有的Shape(不必关心Connector,由另一个类负责装配ObjectStructure,这里假定可以顺利的遍历)。Visitor中包含一个XmlElement收集从各个shape获得的数据。
问题:Visitor每次访问一个Shape会为这个shape分配一个ID。有一种特殊的Shape,它需要自己的下一个Shape的ID作为自己的属性(nextShapeID)。也就是说,我们需要首先访问它的nextShape(这时会为这个shape分配一个ID),然后把下一个Shape的ID作为自己的属性(注意这个ID是动态产生的)才能够产生自己对应的XML代码。这就存在一个矛盾,对Shape的循环不是Visitor能够控制而是由ObjectStructure控制,而Visit这个特殊的Shape的时候却需要临时改变遍历的策略。
大家帮我想想办法,不一定束缚在Vistor上。

抱歉!评论已关闭.