、概述
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
package com.lyz.design.visitor;
import java.util.Collection;
/**
* Visitor
* @author binghe
*
*/
public interface Visitor {
public void visitString(StringElement stringE);
public void visitFloat(FloatElement floatE);
public void visitCollection(Collection collection);
}
package com.lyz.design.visitor;
import java.util.Collection;
import java.util.Iterator;
/**
* ConcreteVisitor
* @author binghe
*
*/
public class ConcreteVisitor implements Visitor {
public void visitCollection(Collection collection) {
// TODO Auto-generated method stub
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
Object o = iterator.next();
if (o instanceof Visitable) {
((Visitable)o).accept(this);
}
}
}
public void visitFloat(FloatElement floatE) {
System.out.println(floatE.getFe());
}
public void visitString(StringElement stringE) {
System.out.println(stringE.getSe());
}
}
package com.lyz.design.visitor;
/**
* Element
* @author binghe
*
*/
public interface Visitable {
public void accept(Visitor visitor);
}
package com.lyz.design.visitor;
/**
* ConcreteElement
* @author binghe
*
*/
public class FloatElement implements Visitable {
private Float fe;
public FloatElement(Float fe) {
this.fe = fe;
}
public Float getFe() {
return this.fe;
}
public void accept(Visitor visitor) {
visitor.visitFloat(this);
}
}
StringElement
package com.lyz.design.visitor;
/**
* ConcreteElement
* @author binghe
*
*/
public class StringElement implements Visitable {
private String se;
public StringElement(String se) {
this.se = se;
}
public String getSe() {
return this.se;
}
public void accept(Visitor visitor) {
visitor.visitString(this);
}
}
package com.lyz.design.visitor;
import java.util.ArrayList;
import java.util.List;
/**
* Test
* @author binghe
*
*/
public class Test {
public static void main(String[] args) {
Visitor visitor = new ConcreteVisitor();
StringElement se = new StringElement("abc");
se.accept(visitor);
FloatElement fe = new FloatElement(new Float(1.5));
fe.accept(visitor);
System.out.println("===========");
List result = new ArrayList();
result.add(new StringElement("abc"));
result.add(new StringElement("abc"));
result.add(new StringElement("abc"));
result.add(new FloatElement(new Float(1.5)));
result.add(new FloatElement(new Float(1.5)));
result.add(new FloatElement(new Float(1.5)));
visitor.visitCollection(result);
}
}
abc
1.5
===========
abc
abc
abc
1.5
1.5
1.5