package 访问者模式.visitor;
import 访问者模式.element.ConcreteElement1;
import 访问者模式.element.ConcreteElement2;
public interface IVisitor {
public voidvisit(ConcreteElement1 el1);
public voidvisit(ConcreteElement2 el2);}
实现类
package 访问者模式.visitor;
import 访问者模式.element.ConcreteElement1;
import 访问者模式.element.ConcreteElement2;
public class Visitor implements IVisitor {
@Override
public voidvisit(ConcreteElement1 el1){
el1.doSomething();}
@Override
public voidvisit(ConcreteElement2 el2){
el2.doSomething();}}
元素
基类
package 访问者模式.element;
import 访问者模式.visitor.IVisitor;
public abstract class Element {
public abstract voidaccept(IVisitor visitor);
public abstract voiddoSomething();}
具体类
package 访问者模式.element;
import 访问者模式.visitor.IVisitor;
public class ConcreteElement1 extends Element {
@Override
public voiddoSomething(){
System.out.println("这是元素1");}
@Override
public voidaccept(IVisitor visitor){
visitor.visit(this);}}--------------------------------------------------------------
package 访问者模式.element;
import 访问者模式.visitor.IVisitor;
public class ConcreteElement2 extends Element {
@Override
public voiddoSomething(){
System.out.println("这是元素2");}
@Override
public voidaccept(IVisitor visitor){
visitor.visit(this);}}
结构对象
package 访问者模式.objectStructure;
import 访问者模式.element.ConcreteElement1;
import 访问者模式.element.ConcreteElement2;
import 访问者模式.element.Element;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class ObjectStructure {
public static List<Element>getList(){
List<Element> list = new ArrayList<>();
Random ran = new Random();for(int i=0; i<10; i++){int a = ran.nextInt(100);if(a>50){
list.add(new ConcreteElement1());}else{
list.add(new ConcreteElement2());}}return list;}}
客户端
package 访问者模式.client;
import 访问者模式.objectStructure.ObjectStructure;
import 访问者模式.visitor.Visitor;
import 访问者模式.element.Element;
import java.util.List;
public class Client {
public staticvoidmain(String[] args){
List<Element> list = ObjectStructure.getList();for(Element e: list){
e.accept(new Visitor());}}}
效果
这是元素2
这是元素1
这是元素1
这是元素2
这是元素2
这是元素2
这是元素1
这是元素2
这是元素1
这是元素2
Process finished with exit code 0