Visitor(访问者) java实现

来源:互联网 发布:java 感叹号 编辑:程序博客网 时间:2024/06/15 10:23
package Visitor.MyTest;import java.util.Collection;import java.util.Iterator;/** * 采访者 * @author Administrator */public abstract class Visitor {public void visit(Visitable visitable) {// TODO Auto-generated method stubSystem.out.println(this+"采访了"+visitable);}public  void visitCollection(Collection collection){Iterator it=collection.iterator();while(it.hasNext()){Object obj=it.next();if(obj instanceof Visitable){System.out.println(this+"采访了"+obj);}}};public abstract String toString();}


package Visitor.MyTest;/** * 被采访者 * @author Administrator * */public abstract class Visitable {/** 接受采访者的采访 **/public abstract void accept(Visitor visitor);}

package Visitor.MyTest;public class Visitable1 extends Visitable {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "被采访者甲";}}

package Visitor.MyTest;public class Visitable2 extends Visitable {@Overridepublic void accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.visit(this);}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "被采访者乙";}}

package Visitor.MyTest;public class Visitable3 extends Visitable {@Overridepublic void accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.visit(this);}@Overridepublic String toString() {return "被采访者丙";}}

package Visitor.MyTest;public class VisitorA extends Visitor{@Overridepublic String toString() {return "记者A";}}

package Visitor.MyTest;public class VisitorB extends Visitor{@Overridepublic String toString() {return "记者B";}}

package Visitor.MyTest;import java.util.ArrayList;import java.util.Collection;public class MyTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubVisitable vb1=new Visitable1();Visitable vb2=new Visitable2();Visitable vb3=new Visitable3();Visitor vsa=new VisitorA();Visitor vsb=new VisitorB();vb1.accept(vsa);vsa.visit(vb3);Collection c=new ArrayList();c.add("xx");c.add(vsb);c.add(vb2);vsb.visitCollection(c);}}