Eric Gamma 的《设计模式》一书解释说,复合结构可以声明操作:
此类操作由非叶运算符递归传播。
另一方面,通过使用访问者设计模式来创建访问复合结构并执行操作的访问者,我们可能会得到相同的结果。
那么,是否有任何理由选择在组合中添加操作而不是为每个所需操作创建一个新访问者?或者反之亦然?
最佳答案
我就不描述这些图案的含义了,这样优秀的已经有很多了descriptions 。但我会说这些模式互补彼此。访问者允许我们添加新操作而不更改可以执行这些操作的对象的类,但是如果我们可以更改这些类,我们就可以在不使用访问者的情况下向它们添加新操作,它一切都取决于上下文。
有时在开发阶段我们无法预测将对复合对象执行哪些操作,但我们可以通过向复合对象添加 accept()
方法来提供将来添加此类功能的可能性复合对象的接口(interface),它采用访问者的接口(interface)并为当前对象调用其 visit()
方法。
关于oop - 复合设计模式中的操作与在访问者设计模式中添加新访问者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63649480/