我想知道Visitor模式和使用静态方法分别执行代码之间的区别是什么。
让我们看一个我称之为“访客”模式的示例:
new AnalyticsVisitor.accept(myClass);
,例如,当从myClass
调用时,会将工作移到访问者中执行。如果占用大量内存,它甚至可以更快地进行垃圾回收。
现在让我们看一下使用一种简单的方法来实现或多或少相同的事情:
new AnalyticsManager.execute(myClass);
我完成了同样的事情吗?
那么,为什么要使用Visitor模式而不是仅使用类(除非用于双重调度)?
答案 0 :(得分:2)
这个问题还是有点困惑。我怀疑您还不了解“访客”模式的目标。
As discussed here当您具有相对稳定的(就开发而言)相对稳定的复杂数据结构(例如解析树)时,访问者模式很有用,但是您希望能够继续在所有对象上添加新操作其元素。这与标准的OO技术笨拙。
访问者模式所基于的技术是两次发送,因此当您说“为什么不使用访问者模式,除非进行两次发送?”您实际上是在说“为什么使用访客模式?”
您的示例代码仅包含客户端,因此不清楚您的新技术实际上提供了什么。
对于实际的访客模式,提供的代码似乎是向后的。应该是:
my_datastructure.accept(analytics_visitor);
analytics_visitor
继承自MyDataStructureVisitor,并为数据结构可以容纳的每种元素类型提供单独的方法。
至于成就:
“代码分隔”是一个模糊的术语。访问者模式允许在不定义所有操作(假定方法)的情况下定义数据结构。相反,它们可以单独定义-封装质量较差。)
目前尚不清楚将访问者模式应用于多个数据结构的含义。每个访问者类别都与一个数据结构相关联。
目标不是在遗留代码中添加“信息”。它将操作添加到旧代码中。