JiveJdon Community Forums
在线144人 J道首页 | 论坛首页 | 培训咨询 | 开源框架 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 12 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
VRGL

发表文章: 21
注册时间: 2002年09月22日 11:04
看visitor模式的感受 发表: 2003年03月30日 13:28 回复
就是提倡用多态,
而不是RTTI。
lsj

发表文章: 34
注册时间: 2002年10月16日 08:52
Re: 看visitor模式的感受 发表: 2003年03月30日 17:39 回复
RTTI的威力真是不小,能用多态取代它吗?
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
Re: 看visitor模式的感受 发表: 2003年03月31日 14:33 回复
to VRGL
两句话很抽象,我没能一下子明白,能仔细讲一下吗?反正大家都是讨论,讨论越多,学到的东西就越多。
richardluopeng

发表文章: 72
注册时间: 2002年08月30日 15:52
Re: 看visitor模式的感受 发表: 2003年03月31日 14:34 回复
java中不能
VRGL

发表文章: 21
注册时间: 2002年09月22日 11:04
Re: 看visitor模式的感受 发表: 2003年03月31日 18:39 回复
在访问一个类继承结构的时候,
容易使用rtti来type switch,
而visitor用多态去掉了这个type switch,
并且遵循ocp,
用“容易添加新类”这个“你不需要的优势”
来换取“容易添加新的方法”这个“你需要的优势”。
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
Re: 看visitor模式的感受 发表: 2003年04月01日 11:31 回复

在很多场合,我们使用RTTI实际是为了达到更加抽象的目的,但是抽象本身的一个问题就是无法从抽象中找到“原来的我”了。

比如一个接口抽象了很多具体的继承类,在很多地方我们都是和接口直接打交道,这样做的前提是必须在接口中声明所有需要使用的方法,这样做可以对付大部分问题。

以上是关于接口的多态,这样做的前提是,所有对象都是继承同一个接口,如果对象分属不同的抽象接口,怎么做?

Visitor模式是对在多个抽象的对象群的一种特殊处理,适合在这样一个场景:

有一堆身份各异对象(通常是数据状态类),这些状态类有一些特征:被动的(数据都是被动的),需要等待外界来操作或推动。

那么现在外界有一个动作来准备操作这些状态类了,但是走到面前,突然傻眼,分不清楚谁是谁啊?这些状态类可能属于不同类型的接口,怎么办?

解决思路,当然把这些状态类再统一到一个接口下就可以操作了。
当然,这时需要这些状态类做些修饰,有个“对外开放”的姿态,再实现一个统一接口Visitable,这个接口中提供的方法就更抽象:Accept()。

其实Accept方法的具体实现是采取了Adapter模式,因为各个状态类都分属不同的接口,总不能为接受访问修改这些接口吧?




VRGL

发表文章: 21
注册时间: 2002年09月22日 11:04
Re: 看visitor模式的感受 发表: 2003年04月01日 14:26 回复
visitor模式的最主要的用途是
对已有类继承结构的访问,而不
是对新的一组软件结构。
设计模式最主要的建议是采用
多态代替switch,visitor就是
采用多态来代替type switch,
用RTTI来type switch是不符合
面向对象的原则的,这也是visitor
模式的真正用意:将多态和ocp结合
起来。
wwlhp@jdon.com

发表文章: 111
注册时间: 2003年06月03日 17:19
Re: 看visitor模式的感受 发表: 2003年06月08日 14:49 回复
bang分析得非常有道理
bruce

发表文章: 191
注册时间: 2003年05月28日 09:53
Re: 看visitor模式的感受 发表: 2003年06月13日 09:12 回复
有一种看法不知对不对,

咱们可不可以把从接口Visitable 实现的子类看成是具有单一功能的Facade,当然更正规的说法应是delegation. 我只是想从模式变换的角度去看Visitor模式。

很想听听各位同仁们的意见。
wwlhp@jdon.com

发表文章: 111
注册时间: 2003年06月03日 17:19
Re: 看visitor模式的感受 发表: 2003年06月24日 08:42 回复
最近我在看JUnit的文档时,意外的发现了大师对于访问者模式双重分派的看法:
The idea behind double dispatch is to use an aditional call to discover the kind of argument we are dealing with.
bruce

发表文章: 191
注册时间: 2003年05月28日 09:53
Re: 看visitor模式的感受 发表: 2003年06月24日 09:12 回复
wwlhp@jdon.com

好久不见了.

不过觉得这位大师也没什么新的看法. 还是Banq说的更清楚, 别说我拍..,我只是实事求是, 哇,有鸡蛋过来了, 我闪.

mountebank

发表文章: 1
注册时间: 2003年12月09日 11:20
Re: 看visitor模式的感受 发表: 2003年12月09日 11:23 回复
banq的解释令我有恍然大悟之感,这和com中IUnkown接口中的queryinterface方法是不是很像呢?
chenye99

发表文章: 15
注册时间: 2003年06月23日 10:20
Re: 看visitor模式的感受 发表: 2003年12月09日 14:21 回复
我觉得Visitor模式中Visitor子类的visit方法是整个模式的核心,但始终没有搞明白Visitor到底应该怎么用。:( 是否时客户端维护一个包含visitable的聚集,然后依次调用起accept方法?哪位能给出个具体的实例?
这个主题有 12 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-07 jdon.com

anti spam