`
experience
  • 浏览: 204991 次
社区版块
存档分类
最新评论

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

XML 
阅读更多

选择放在首页一方面是希望更多的朋友可以帮助我,另一方面我觉得这个案例有一定的典型性。如果大家(特别是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上。

分享到:
评论

相关推荐

    设计模式C++学习之访问者模式(Visitor)

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式将算法与数据结构分离,使得算法可以独立于数据结构进行变化,增强了系统的可扩展性。 在C++中...

    基于visitor模式和访问者模式的表达式树_求值引擎

    通过使用Visitor模式,我们可以将计算逻辑封装在一个独立的类中,这样可以保持表达式节点类的纯净,避免它们直接参与计算。求值引擎遍历表达式树,对每个节点应用适当的计算规则,最终得到结果。 5. **ExpressMFC**...

    C++ Visitor模式

    在编译器中,可以使用Visitor模式来实现语法分析和代码生成。 总之,Visitor模式提供了一种灵活的方式来添加新的操作,而无需修改原有的类结构,这对于保持软件的可维护性和可扩展性非常有帮助。然而,使用时需要...

    Visitor模式Visitor模式

    在这种情况下,开发者可以使用 Visitor 模式来解决这个问题。Visitor 模式允许在不修改已有的类层次的情况下,增加新的操作或行为。这种模式可以使得开发者在不改变原有类层次的情况下,能够对对象进行不同的处理。 ...

    试试visitor设计模式

    也许最开始出现这种模式,是因为另外的原因: 我有一堆数据放在一个库里头,不想让其它人拿着, 如果你要用数据干活,那你就把函数指针给我,我来替你使用这个数据。...然后人们就说,这是visitor模式。

    设计模式系列之visitor

    在软件设计领域,设计模式是一种在特定情境下解决常见问题的最佳实践。"设计模式系列之visitor"是一个关于软件设计模式的讨论,特别是关注于“访问者”(Visitor)模式。这个模式是GOF(Gamma, Helm, Johnson, ...

    C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式

    使用**Visitor模式**可以很容易地实现这一点。 1. **定义访问者接口**:`IVisitor`接口包含两个方法`VisitAdditionExpression`和`VisitMultiplicationExpression`,分别对应两种类型的节点。 2. **定义具体访问者...

    设计模式之访问者模式(Visitor)

    **访问者模式(Visitor...综上所述,访问者模式在处理数据结构变化频繁且需要添加新操作的场景下表现出色,但需要谨慎使用,以避免过度设计。在实际开发中,应根据项目需求和团队协作情况灵活选择是否采用访问者模式。

    访问者模式VisitorPattern

    **访问者模式(VisitorPattern)** 访问者模式是一种行为设计模式,它使你能在不修改对象结构的前提下向对象添加新的操作。这种模式常用于处理具有复杂逻辑的对象结构,特别是当你需要对这些对象进行多态操作时。访问...

    C#设计模式之Visitor

    设计模式是软件开发中的经验总结,它提供了解决常见问题的可复用解决方案。在C#编程中,设计模式可以帮助我们编写更灵活、可扩展和易于维护的代码。"Visitor"(访问者)设计模式是一种行为模式,它允许我们在不修改...

    (行为型模式) Visitor 访问者模式

    C#面向对象设计模式 (行为型模式) Visitor 访问者模式 视频讲座下载

    设计模式之访问者模式(Visitor Pattern)

    因此,在选择使用访问者模式时,需要权衡其带来的好处与潜在的问题。 在编程中,我们可以创建一个访问者接口,定义对每个元素的操作方法,然后为每个具体元素类实现这个接口,让访问者能够访问并操作它们。同时,...

    设计模式-访问者(Visitor)模式详解和应用.pdf

    ### 设计模式-访问者(Visitor)模式详解和应用 #### 一、访问者模式简介 访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向一组已存在的类添加新的行为,而无需修改这些类。这种模式的核心思想是在...

    设计模式-访问者模式(Visitor)

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式的核心思想是分离了算法和对象结构,使得算法可以在不改变对象结构的情况下独立变化。 访问者...

    Visitor

    6. 字体版权:使用商业字体时需注意版权问题,避免侵权。 至于压缩包子文件的文件名称列表只有一个"visitor",这可能是指包含实现访问者模式的代码文件,或者是一个与字体处理相关的具体类或模块。具体的内容需要...

    访问者模式(Visitor Pattern) 1. 访问者模式概述 1.1 定义 1.2 基本思想 2. 访问者模式的结构 3. 访问者模式的UML类图 4. 访问者模式的工作原理 5. Java实现

    访问者模式(Visitor Pattern) 1. 访问者模式概述 1.1 定义 1.2 基本思想 2. 访问者模式的结构 3. 访问者模式的UML类图 4. 访问者模式的工作原理 5. Java实现示例 5.1 基本实现示例 5.2 访问者模式处理复杂对象层次...

    decaf-lang#decaf-book-spec#visitor模式1

    rust中当然也可以有visitor模式这样的东西,比如

Global site tag (gtag.js) - Google Analytics