论坛首页 Java企业应用论坛

学习笔记:访问者模式

浏览 4663 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-18  
被访问者接口
public interface Visitable {
	public void accept(Visitor visitor);
}


访问者接口
public interface Visitor {
	public void visitCollection(Collection collection);
	public void visit(StringElement stringE);
	public void visit(IntegerElement integerE);
	public void visit(ObjectAElement objectAE);
}


被访问者实例
public class StringElement implements Visitable {

	private String value;
	public StringElement(String string){
		value = string;
	}
	
	public String getValue(){
		return value;
	}
	
	public void accept(Visitor visitor) {
		visitor.visit(this);
	}

}

public class ObjectAElement implements Visitable {

	private Object value;
	
	public ObjectAElement(Object objectA){
		value = objectA;
	}
	
	public String getValue(){
		return value.toString();
	}
	
	public void accept(Visitor visitor) {
		visitor.visit(this);
	}

}

public class IntegerElement implements Visitable {
	
	private int value;
	
	public IntegerElement(int intergerE){
		value = intergerE;
	}
	
	public int getValue(){
		return value;
	}

	public void accept(Visitor visitor) {
		visitor.visit(this);

	}

}


访问者实例
public class ConcreteVisitor implements Visitor {

	public void visit(StringElement stringE) {
		System.out.println("'"+stringE.getValue()+"'");
	}

	public void visit(IntegerElement integerE) {
		Integer temp = integerE.getValue();
		int tempI = temp.intValue() + 1;
		System.out.println(tempI);
	}

	public void visit(ObjectAElement objectAE) {
		System.out.println(objectAE.getValue());

	}

	public void visitCollection(Collection collection) {
		Iterator iterator = collection.iterator();
		while(iterator.hasNext()){
			Object o = iterator.next();
			if(o instanceof Visitable){
				((Visitable)o).accept(this);
			}
		}
	}

}
  • 大小: 3.7 KB
   发表时间:2007-01-18  
http://www.iteye.com/post/193857
0 请登录后投票
   发表时间:2007-01-19  
这种模式的访问者中的方法还是和被访问者耦合在一起了,通过反射解决是个不错的方法
0 请登录后投票
   发表时间:2007-01-20  
多谢执教
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics