GoF定义:表示在一个对象结构的某个元素上的一个操作。这个模式可以让你在不改变这个元素所在的类的情况下定义新的操作
这个模式帮助我们在不对现有类进行改变的前提下增添新功能。所以我们在这里可以遵循open/close原则(对扩展开放,对修改关闭)
现实世界:假如我们叫了一个出租车,当我们上车之后,它有很多种路线可以到达我们的目的地,但是我们对此是未知的
代码世界:在给公共接口添加新功能时可以使用这个模式,即通过一个visiting类来和实现类一起实现功能(不影响实现类本身的行为)
IOriginalInterface和MyClass是原始的接口和实现类
class Scratch {
public static void main(String[] args) {
System.out.println("***Visitor Pattern Demo***\n");
IVisitor v = new Visitor();
MyClass myClass = new MyClass();
myClass.accept(v);
}
}
interface IVisitor {
void visit(MyClass myClass);
}
interface IOriginalInterface {
void accept(IVisitor visitor);
}
class MyClass implements IOriginalInterface {
private int intVal;
public int getIntVal() {
return intVal;
}
public void setIntVal(int intVal) {
this.intVal = intVal;
}
@Override
public void accept(IVisitor visitor) {
System.out.println("Initial value of the integer :"+ intVal);
visitor.visit(this);
System.out.println("\nValue of the integer now :"+ intVal);
}
}
class Visitor implements IVisitor {
@Override
public void visit(MyClass myClass) {
System.out.println("Visitor is trying to change the integer value");
myClass.setIntVal(100);
System.out.println("Exiting from Visitor- visit");
}
}
这个模式正如书中所说,核心在于不改变已有的类的结构的前提下为对象增添一些功能,感觉还是比较实用的
原文:https://www.cnblogs.com/mouseGo/p/14136170.html