看visitor模式的感受
而不是RTTI。
比如一个接口抽象了很多具体的继承类,在很多地方我们都是和接口直接打交道,这样做的前提是必须在接口中声明所有需要使用的方法,这样做可以对付大部分问题。
以上是关于接口的多态,这样做的前提是,所有对象都是继承同一个接口,如果对象分属不同的抽象接口,怎么做?
Visitor模式是对在多个抽象的对象群的一种特殊处理,适合在这样一个场景:
有一堆身份各异对象(通常是数据状态类),这些状态类有一些特征:被动的(数据都是被动的),需要等待外界来操作或推动。
那么现在外界有一个动作来准备操作这些状态类了,但是走到面前,突然傻眼,分不清楚谁是谁啊?这些状态类可能属于不同类型的接口,怎么办?
解决思路,当然把这些状态类再统一到一个接口下就可以操作了。
当然,这时需要这些状态类做些修饰,有个“对外开放”的姿态,再实现一个统一接口Visitable,这个接口中提供的方法就更抽象:Accept()。
其实Accept方法的具体实现是采取了Adapter模式,因为各个状态类都分属不同的接口,总不能为接受访问修改这些接口吧?
咱们可不可以把从接口Visitable 实现的子类看成是具有单一功能的Facade,当然更正规的说法应是delegation. 我只是想从模式变换的角度去看Visitor模式。
很想听听各位同仁们的意见。
不过觉得这位大师也没什么新的看法. 还是Banq说的更清楚, 别说我拍..,我只是实事求是, 哇,有鸡蛋过来了, 我闪.