设计模式篇之 访问者模式 Visitor
目的
访问者是一种行为型设计模式,它让你可以将算法与它们操作的对象分离。
问题
假设你的团队正在开发一个处理地理信息的应用程序,这些地理信息被结构化为一个庞大的图。图中的每个节点可以表示一个复杂的实体,如城市,也可以表示更细粒度的东西,如工业区、旅游景点等。如果它们所代表的实体之间有道路相连,那么这些节点也会相互连接。在底层,每种节点类型都由其自己的类表示,而每个具体的节点都是一个对象。

在某个时刻,你得到了一个任务,将图导出为 XML 格式。最初,这项工作看起来相当直接。你计划在每个节点类中添加一个`export`方法,然后利用递归遍历图中的每个节点,执行`export`方法。这个解决方案简单而优雅:多亏了多态,你没有将调用`export`方法的代码与节点的具体类耦合。
不幸的是,系统架构师拒绝让你修改现有的节点类。他说代码已经在生产环境中使用,他不想因为你的更改中可能存在的错误而冒险破坏它。