复合设计模式中的操作与访客设计模式中添加新访客的关系

问题描述

Eric Gamma的“设计模式”书解释说,复合结构可以声明操作:

enter image description here

此类操作由非叶运算符递归传播。

另一方面,通过使用访客设计模式来创建访问组合结构并进行操作的访客,我们可能会得到相同的结果。

那么,为什么有人会选择在组合中添加一个操作而不是为每个所需的操作创建一个新的访问者呢?反之亦然?

解决方法

我不会描述这些模式的含义,已经有许多出色的descriptions。但是我会说这些模式相互补充。访问者允许我们添加新操作而不更改可以执行这些操作的对象的类,但是如果我们可以更改这些类,则可以在不使用访问者的情况下向其添加新操作都取决于上下文。

有时在开发阶段我们无法预测对复合对象执行的操作,但是我们可以通过在复合对象的界面上添加accept()方法来提供将来添加此类功能的可能性它采用访问者的界面并为当前对象调用其visit()方法。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...