`
firmgoal
  • 浏览: 7394 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

再谈Iterator vs Visitor

阅读更多

Iterator和Vistor的描述见http://www.iteye.com/topic/21293

啥时候用Iterator?啥时候用Vistor?从我的角度看来Vistor是为了解决Iterator的问题而出现的。Iterator有啥问题呢?设想这么一套类体系:类很多,几百个,类继承层次和关系也很多,这个时候,用Iterator,如下:

    while ( (node = iter.next()) != null){

.....

node.method1();

.....

    }

OK,处理方法是写在各个node里的,接下来,我想要为这套类体系加一个方法method2(),完了,严重的问题出现了,几百个类发生变动。如果我不把方法method2()写在node里呢?你的Iterator的处理方法会有一大堆的if/else来根据node的不同来做相应的处理,这个肯定同样也是不可取的。怎么办?Visitor出现了,它怎么解决这个问题?呵呵,它只不过帮你把方法挪个位置,当你需要在类体系中加一个method2()方法时,你实际上需要把所有的method2()方法搬到一个新建的Visitor中。

总结:当需要修改类体系增加遍历所需方法时,就增加一个Visitor,Visitor是为了维护类体系的稳定性而产生的模式,也这是它比Iterator优越的地方。

分享到:
评论

相关推荐

    VisitorPattern:CS100 Lab8-使用Visitor模式和Iterator模式的操作数计数器的实现

    访客模式 作者:Brian ( ) 您必须一组两个一组地工作 迭代器类 您已经获得了四个文件,其中包含以下五个迭代器类的声明和定义: 迭代器:这是用于定义所有其他迭代器类的接口的基类 NullIterator:此迭代器由...

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility ...

    Visitor-and-Iterator-Design-Pattern

    您已经提供了一个迭代器类Iterator ,用户可以创建它来遍历整个表达式树。 该迭代器的特殊之处在于它多次访问树的每个节点。 没有子节点的节点将被访问一次。 有一个孩子的节点被访问两次(访问孩子之前和之后)。 ...

    Java实现在访问者模式中使用反射.docx

    public void accept(Visitor visitor) { visitor.visitString(this); } } // 其他Visitable类类似实现,如VisitableFloat ``` 然后,我们可以创建一个具体的`Visitor`实现,比如`PrintingVisitor`,它会根据对象...

    C#面向对象设计模式纵横谈视频以及源码

    行为型模式关注对象之间的交互和责任分配,包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、命令(Command)、迭代器(Iterator)、访问者(Visitor)、备忘录(Memento)、状态(State)...

    设计之道 张逸

    由你掌握 重构初体验 从企业的运行价值链说起 使用极限编程改善项目的设计和灵活性 从实例谈OOP、工厂模式和重构 从实例谈Adapter 模式 从Adapter模式到Decorator模式 Visitor模式之...

    Objective C 设计模式(英文版)

    Chapter 14: Iterator Chapter 15: Visitor Chapter 16: Decorator Chapter 17: Chain of Responsibility Chapter 18: Template Method Chapter 19: Strategy Chapter 20: Command Chapter 21: Flyweight Chapter 22...

    精心整理的23种python设计模式代码

    Structural-bridge,Structural-proxy,Structural-composite,Structural-adapter,Structural-flyweightStructural-decorator,Structural-facade,behavioral-visitor,behavioral-strategy,behavioral-memento...

    23种设计模式java实现

    adapter bridge build chainOfResp command decorator factory iterator mediator observer proxy state visitor 设计模式,java实现,如有纰漏请指正,谢谢

    软件设计模式—行为型模式

    软件设计模式,行为型模式:ChainOf Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template method Visitor

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    3. 行为型模式:这类模式关注对象间的交互和职责分配,包括策略(Strategy)、模板方法(Template Method)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录...

    java设计模式教程+源代码

    AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) Adapter ( 适配器模式 ) Bridge ( 桥接模式 ) ...Visitor ( 访问者模式 )

    设计模式源代码

    AbstractFactory Adapter Brige Builder ChainOfResponsibility Command Composite Decorator Facade Factory FlyWeight Interpreter Iterator Mediator Memento Observer Prototype ...Visitor

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、...

    谈Java的23种设计模式

    如装饰器模式(Decorator)、观察者模式(Observer)、代理模式(Proxy)、桥接模式(Bridge)、责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)...

    C++设计模式(Design Pattern)范例源代码

    注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) 生成器模式(Builder) 工厂方法模式(Factory Method) 原型模式(Prototype) 单件模式(Singleton) 结构型: 适配器模式(Adapter) 桥接模式...

    超经典的一部书--设计模式

    Abstract Factory,Builder,Prototype,Singleton ,Adapter_Object,Bridge Composite Decorator Facade Flyweight Proxy ,Chain of Responsibility Command Iterator Mediator Memento ...Visitor

    23种java设计模式

    Iterator(迭代模式)、Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、 Mediator(中介模式)、Interpreter(解释器模式)、Strategy(策略模式)、State 、Observer(观察者模式)、...

    GoF+23种设计模式解析附C++实现源码(2nd+Edition).pdf

    **C++实现**: 在C++中实现Visitor模式通常涉及定义一个Visitor接口和多个具体的Visitor类。此外,还需要修改Element类,使其接受Visitor的访问。 #### 3.9 Chain of Responsibility模式 **定义**: Chain of ...

Global site tag (gtag.js) - Google Analytics