访问者模式
类型:行为型模式
实质总结:
给一个模块的若干功能同时扩展算法。
角色:元素,访问者,数据结构。数据结构对应模块,元素对应功能,算法对应访问者。

java
interface Visitor {
void visit(ConcreteElement element);
}
interface Element {
void accept(Visitor visitor);
}
class ConcreteElement implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
class ConcreteVisitor implements Visitor {
@Override
public void visit(ConcreteElement element) {
System.out.println("Visiting element");
}
}
这里要使用element的accept方法执行某项功能,实际是通过调用visitor的visit方法。如果要扩展accept的算法,即换个visitor,调用新的visitor的visit方法即可。ObjectStructure和Element及ConcretElement的数据结构都不必变化,只要新增visitor接口的实现类即可。满足单一职责原则,每个visitor实际就是干活的,不影响其他visitor以及element。实际干活去的是visitor。功能拥有者是element。element不变,要切换算法,就换调accept的参数(visitor)就行。
所有的模式都是为了代码能够复用和解耦。