论坛首页 Java版 设计模式

关于visitor的问题

浏览 910 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-02-27
今天忽然看到了visitor模式,就想去了解他。。。
  于是我就到处打听她,以为她是个美女,可是美女真的很难了解,我左搜索右查找,也只是了解了她的基本外貌而已:
  为了增强对对象组合的处理
  一个Visitor接口          -------  若干 实现类
  一个被访问者接口 ,基本的方法accept(Visitor V) ------------若干实现类
  体现这个模式的面貌:基本步骤
  某帅哥告诉了一下她还有如此爱好:
      帅哥说

  然后包打听布娃娃大哥哥进一步指出MM有如下特征:特征

  可是无奈我太笨,老是弄不明白MM心理是怎么想的:
  难道就为了这个东西,每次我们都要为一个对象去实现Vistorable(被访问者)接口吗,写一个鸟accept方法?
  我怎么很少碰到这种对象集要分类处理的情况,就算碰到了,我一直觉得那个什么被访问者接口很恶心。。。。。
  难道MM的心这么难懂吗?是我太笨?还是口拙?还是卡壳了?
 好处是什么呢?火候不到,难以理解。。。
 望行家指点,睡觉去了,看这个被访问者接口就恶心。。
   
最后更新时间:2008-02-27
zhouxwyeah 写道
  今天忽然看到了visitor模式,就想去了解他。。。
  于是我就到处打听她,以为她是个美女,可是美女真的很难了解,我左搜索右查找,也只是了解了她的基本外貌而已:
  为了增强对对象组合的处理
  一个Visitor接口          -------  若干 实现类
  一个被访问者接口 ,基本的方法accept(Visitor V) ------------若干实现类
  体现这个模式的面貌:基本步骤
  某帅哥告诉了一下她还有如此爱好:
      帅哥说

  然后包打听布娃娃大哥哥进一步指出MM有如下特征:特征

  可是无奈我太笨,老是弄不明白MM心理是怎么想的:
  难道就为了这个东西,每次我们都要为一个对象去实现Vistorable(被访问者)接口吗,写一个鸟accept方法?
  我怎么很少碰到这种对象集要分类处理的情况,就算碰到了,我一直觉得那个什么被访问者接口很恶心。。。。。
  难道MM的心这么难懂吗?是我太笨?还是口拙?还是卡壳了?
 好处是什么呢?火候不到,难以理解。。。
 望行家指点,睡觉去了,看这个被访问者接口就恶心。。

如果你使用组合模式,那么常常也需要visitor模式.visitor模式和Iterator模式的目的很相似,都是访问结点然后
对结点进行操作,都是把访问的职责从类中分离出来.但是visitor通常是对不同结点进行不同的操作,要比跌代做更多的事情.而Iterator通常只是遍历,做同一件事情,visitor比Iterator具有更强的偶合性,需要结点类实现accept方法.visitor模式把对结点的操作从结点中分离出来,带来了很大的好处:我们增加对结点的操作时,不需要在所有的结点类中增加该方法,只需要实现Visitor即可,也就是说符合面向对象的原则:对修改封闭,对扩展开放.
   
0 请登录后投票
最后更新时间:2008-04-14
忘记在哪里看的了,对于visitor模式总结的很好的一句话:
visitor模式的思路就是鼓励多态而不是RTTI
如果我们将遍历过程写在visitable.accept方法中这就是传统visitor模式
如果写在visitor.visit方法中也能实现一样的功能但是势必出现大量if...else...
判断元素具体型别并分别处理的代码,一来显得bad small、而来迫使客户自己实现遍历算法这肯定是不行的。
   
0 请登录后投票
最后更新时间:2008-04-14
虽然visitor模式通过将具体方法(accept)转移到被访问元素中、利用回调、双分派的方式消灭了if...else...的运行时类型识别,算是消灭了这个badsmall。
却隐含引入了新的约束和badsmall:采用visitor模式要求visitable元素尽量少的变化、要求元素实现visitable的accept方法、这个方法放在每个元素当中总让人感觉不太舒服。
   
0 请登录后投票
最后更新时间:2008-04-14
建议楼主看一下dom4j的visitor,xml几个元素类型固定、几乎不可能增加新的类型、采用visitor让客户自己简单定义一下如何访问每个元素,而具体遍历算法都在dom4j内部,这里用这个模式还是很好很强大的。
   
0 请登录后投票
最后更新时间:2008-06-11
visitor模式的思路就是鼓励多态而不是RTTI
我也看到过这句话
但是不是很理解
不过我觉得反射确实没有起到解偶作用,只是把耦合延迟了而已
顺便:vistor我觉得最难理解得设计模式之一
   
0 请登录后投票
最后更新时间:2008-08-06
我也在看,我看的是设计模式,是用C++描述的,看的我一头雾水,C++感觉基础不是太好,大家推荐有没有是用java语言描述的设计模式的书 谢过。。。。。。。。。。。。学习。。
   
0 请登录后投票
论坛首页 Java版 设计模式

跳转论坛:
JavaEye推荐