概念
访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下,定义作用于这些元素的新操作。书中给出的例子中, 对象结构指的是被访问的男人和女人类实例化对象的集合,而成功,失败,恋爱等等状态就是访问者。
UML图
代码
abstract class Visitor
{
public abstract void visit(ConcreteElementA elementA);
public abstract void visit(ConcreteElementB elementB);
public void visit(ConcreteElementC elementC)
{
//元素ConcreteElementC操作代码
}
}
class ConcreteVisitor extends Visitor
{
public void visit(ConcreteElementA elementA)
{
//元素ConcreteElementA操作代码
}
public void visit(ConcreteElementB elementB)
{
//元素ConcreteElementB操作代码
}
}
interface Element
{
public void accept(Visitor visitor);
}
class ConcreteElementA implements Element
{
public void accept(Visitor visitor)
{
visitor.visit(this);
}
public void operationA()
{
//业务方法
}
}
优缺点
访问者模式的优点:
- 解除了数据结构和作用于数据结构上的操作之间的耦合
- 如果要增加一个新的操作时,只需要在添加一个具体的访问者类,不需要改变其类中的代码,符合开放封闭原则。
访问者的缺点:
增加新的数据结构变得很困难,这种情况下不符合开放封闭原则。