一、意图
改变类结构形式,可在不改变各元素类的前提下定义新的操作。
二、图解
上图node层次将各个操作分布到节点类中导致系统难以理解和维护,比如TypeCheck()和PrettyPrint()不同用途放置一起,产生混乱。重要的是如果增加新操作,就要重新编译所有的这些类。VISITOR模式将每个类中相关操作包装成一个独立对象。如下图
访问当前节点时,我们可以将VISITOR对象传递给当前节点,该节点会向VISITOR对象发送一个包含自身类信息的请求。
改变类结构形式,可在不改变各元素类的前提下定义新的操作。
上图node层次将各个操作分布到节点类中导致系统难以理解和维护,比如TypeCheck()和PrettyPrint()不同用途放置一起,产生混乱。重要的是如果增加新操作,就要重新编译所有的这些类。VISITOR模式将每个类中相关操作包装成一个独立对象。如下图
访问当前节点时,我们可以将VISITOR对象传递给当前节点,该节点会向VISITOR对象发送一个包含自身类信息的请求。