Visitor模式的简单实现
1.描述
一个集合中有同一种类型的数据,他们或者继承同一个父类,或者实现了同一个接口,但是他们各自的属性和方法有时却存在着差异,而这些数据一旦被添加进一些集合以后,他们的差异性就被一般化了,若需要再次取得这些具有“个性”的类的话,则要做大量如下的工作:
for(A a : collection){ if(a instance of B){//..... }else if(a instance of C){//..... }else ....}public interface Visitor {public void visit(StringElement s);public void visit(IntElement n);public void visit(DoubleElement d);}public interface Visitable {public void accept(Visitor visitor);}public class IntElement implements Visitable{private int value = 1;public int getValue(){return this.value;}public void accept(Visitor visitor) {visitor.visit(this);}}public class StringElement implements Visitable{private String value = "I'm String";public String getValue(){return this.value;}public void accept(Visitor visitor) {visitor.visit(this);}}public class Elements implements Visitable{private Collection<Visitable> col = new ArrayList();public void addElement(Visitable v){col.add(v);}public void accept(Visitor visitor) {for(Visitable v : col){v.accept(visitor);}}}public static void main(String args[]){Elements es = new Elements();es.addElement(new StringElement());es.addElement(new IntElement());es.addElement(new DoubleElement());MyVisitor mv = new MyVisitor();es.accept(mv);}element.StringElement:I'm Stringelement.IntElement:1element.DoubleElement:1.1
