访问者是一种行为设计模式, 允许你在不修改已有代码的情况下向已有类层次结构中增加新的行为。
阅读我们的文章访问者和双分派以了解为什么不能通过方法重载来简单地替换访问者。
复杂度:
流行度:
使用示例: 访问者不是常用的设计模式, 因为它不仅复杂, 应用范围也比较狭窄。
这里是 Java 程序库代码中该模式的一些示例:
将形状导出为 XML 文件
在本例中, 我们希望将一系列几何形状导出为 XML 文件。 重点在于我们不希望直接修改形状代码, 或者至少能确保最小程度的修改。
最终, 访问者模式建立了一个框架, 允许我们在不修改已有类的情况下向形状层次结构中添加新的行为。
shapes
shapes/Shape.java: 通用形状接口
shapes/Dot.java: 点
shapes/Circle.java: 圆形
shapes/Rectangle.java: 矩形
shapes/CompoundShape.java: 组合形状
visitor
visitor/Visitor.java: 通用访问者接口
visitor/XMLExportVisitor.java: 具体访问者, 将所有形状导出为 XML 文件
Demo.java: 客户端代码
OutputDemo.txt: 执行结果