main
===================================================================================
package com.visitor.sym;
public class TestVisitor {
/**
* @param args
* 抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的。
* 访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。
* 抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。抽象元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问。
* 元素类:实现抽象元素类所声明的accept方法,通常都是visitor.visit(this),基本上已经形成一种定式了。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
VisitorI visitor = new Visitor();
ConcreteElement1 concreteElement1 = new ConcreteElement1();
concreteElement1.accept(visitor);
ConcreteElement2 concreteElement2 = new ConcreteElement2();
concreteElement2.accept(visitor);
}
}
访问者接口
================================================================================
package com.visitor.sym;
public interface VisitorI {
void visit(ConcreteElement1 concreteElement1);
void visit(ConcreteElement2 concreteElement2);
}
具体访问者
================================================================================
package com.visitor.sym;
public class Visitor implements VisitorI {
@Override
public void visit(ConcreteElement1 concreteElement1) {
// TODO Auto-generated method stub
concreteElement1.doSomething();
}
@Override
public void visit(ConcreteElement2 concreteElement2) {
// TODO Auto-generated method stub
concreteElement2.doSomething();
}
}
元素接口
=================================================================================
package com.visitor.sym;
public interface Element {
void accept(VisitorI visitor);
void doSomething();
}
元素一:
=================================================================================
package com.visitor.sym;
public class ConcreteElement1 implements Element {
@Override
public void accept(VisitorI visitor) {
// TODO Auto-generated method stub
visitor.visit(this);
}
@Override
public void doSomething() {
// TODO Auto-generated method stub
System.out.println("这是第一个元素");
}
}
元素二:
================================================================================
package com.visitor.sym;
public class ConcreteElement2 implements Element {
@Override
public void accept(VisitorI visitor) {
// TODO Auto-generated method stub
visitor.visit(this);
}
@Override
public void doSomething() {
// TODO Auto-generated method stub
System.out.println("这是第二个元素");
}
}
/*打印结果:这是第一个元素
这是第二个元素*/