这两个概念都有一个共同点,即扩展一个操作并在一个单独的类中将其定义在其他地方。但我认为扩展方法不是访问者模式实现的真实例子。有人解释这个吗? 访客模式和扩展方法之间是否存在连接?
答案 0 :(得分:1)
我不会说访客模式和扩展方法之间存在任何直接关系,但有相似之处。
访客模式的目的是允许在对象结构的元素上轻松添加操作,而无需修改不同的元素本身。主要的好处是因为像xml这样的对象结构将具有不同类型的节点。如果要在每个节点上添加操作,则必须在不同类的所有节点中实现它。使用该模式,您可以将其集中在访问者中。另一方面,扩展方法仅关注单个类。
相似之处在于,在扩展方法和访问者类中,您无法访问该类的私有字段。
在我的工作中,我没有遇到需要应用访问者模式的情况,但另一方面我经常使用扩展。直到最近,我才为我的一些模型实现了Active Record扩展,扩展方法确实为它们提供了帮助。
因此,我说它们之间的相似之处在于它们有助于将行为扩展到一个类/一组类,并且相似性几乎就此结束。