【发布时间】:2015-04-12 18:36:50
【问题描述】:
我使用访问者设计模式来解决我们系统中的一个问题。作为参考如何实现它,我使用了DoFactory site 和This YouTube video。
在 DoFactory 示例中,Visitor 使用返回类型为“void”的方法,而在 YouTube 视频中,作者使用“double”。
我为什么要问:
在向公司 CTO 提出解决方案后,他接受了将其称为访客,但他声称如果访客不是 GoF 中所述的“无效”,而不是滥用真正的访客模式。
问题:
访客模式是否需要返回“void”?
我的意思是为了成为 DoFactory (GoF) 所描述的“真正的访问者模式”,或者它可以是任何返回类型并且仍然可以称为“真正的访问者模式”?
【问题讨论】:
-
很高兴知道other作者为什么选择返回
double而不是什么都不返回(void);然后分析这些原因在这种情况下是否有效。大多数时候,谈论 pure 这种或那种模式会适得其反。只需以最适合您的方式使用它;不要太担心如何称呼它。如果您调用其中任何一个访问者模式,大多数人仍然会同意并理解您在说什么:首先,这是主要目标。让我们看看……定义“真实”。 -
我写了一个answer on Programmers.SE 涉及到这一点。简而言之,GoF 设计模式书确实包含返回任意对象的示例代码。这在很大程度上被忽视了,因为该代码在 Smalltalk 中,使用动态类型。 C++ 示例代码必须使用 void 是因为该语言的语义限制,而不是因为 void 返回类型是访问者模式的核心特征。在 Java 中,我们可以以类型安全的方式将泛型用于非 void 返回类型。
-
不允许 CTO 编码的另一个原因 :-)
-
@Ostati 我认为这与 CTO 职位无关。 CTO 不应该自己编写代码可能是有原因的,但我认为这是对高级工程师之间的任何设计/审查讨论中可能出现的特定设计模式的轻微误解。
-
@Qw3ry 部分是开玩笑,部分是真的,部分是你想要的,但是是的,任何人都可以为所欲为,只要他们能够以正确的方式执行。
标签: design-patterns architecture visitor-pattern