《JAVA与模式》第24天―访问者模式 (五)

2014-11-24 08:31:47 · 作者: · 浏览: 3
者角色为每一个具体节点都准备了一个访问操作。由于有两个节点,因此,对应就有两个访问操作。
*/
public interface Visitor {
/**
* 对应于NodeA的访问操作
*/
public void visit(NodeA node);

/**
* 对应于NodeB的访问操作
*/
public void visit(NodeB node);
}
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:50:06
*
* @类说明 :可以看到,抽象访问者角色为每一个具体节点都准备了一个访问操作。由于有两个节点,因此,对应就有两个访问操作。
*/
public interface Visitor {
/**
* 对应于NodeA的访问操作
*/
public void visit(NodeA node);

/**
* 对应于NodeB的访问操作
*/
public void visit(NodeB node);
}

  具体访问者VisitorA类

[java]
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:58:04
*
* @类说明 :
*/
public class VisitorA implements Visitor {
/**
* 对应于NodeA的访问操作
*/
@Override
public void visit(NodeA node) {
System.out.println("VisitorA:" + node.operationA());
}

/**
* 对应于NodeB的访问操作
*/
@Override
public void visit(NodeB node) {
System.out.println("VisitorA:" + node.operationB());
}

}
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:58:04
*
* @类说明 :
*/
public class VisitorA implements Visitor {
/**
* 对应于NodeA的访问操作
*/
@Override
public void visit(NodeA node) {
System.out.println("VisitorA:" + node.operationA());
}

/**
* 对应于NodeB的访问操作
*/
@Override
public void visit(NodeB node) {
System.out.println("VisitorA:" + node.operationB());
}

}

  具体访问者VisitorB类

[java]
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:58:21
*
* @类说明 :
*/
public class VisitorB implements Visitor {
/**
* 对应于NodeA的访问操作
*/
@Override
public void visit(NodeA node) {
System.out.println("VisitorB:" + node.operationA());
}

/**
* 对应于NodeB的访问操作
*/
@Override
public void visit(NodeB node) {
System.out.println("VisitorB:" + node.operationB());
}

}
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:58:21
*
* @类说明 :
*/
public class VisitorB implements Visitor {
/**
* 对应于NodeA的访问操作
*/
@Override
public void visit(NodeA node) {
System.out.println("VisitorB:" + node.operationA());
}

/**
* 对应于NodeB的访问操作
*/
@Override
public void visit(NodeB node) {
System.out.println("VisitorB:" + node.operationB());
}

}

  抽象节点类

[java]
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:58:57
*
* @类说明 :
*/
public abstract class Node {
/**
* 接受操作
*/
public abstract void accept(Visitor visitor);
}
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:58:57
*
* @类说明 :
*/
public abstract class Node {
/**
* 接受操作
*/
public abstract void accept(Visitor visitor);
}

 具体节点类NodeA

[java]
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:59:45
*
* @类说明 :
*/
public class NodeA extends Node {
/**
* 接受操作
*/
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}

/**
* NodeA特有的方法
*/
public String operationA() {
return "NodeA";
}

}
package com.bankht.Visitor.visitor;

/**
* @author: 特种兵—AK47
* @创建时间:2012-7-3 上午10:59:45
*
* @类说明 :
*/
public class NodeA extends Node {
/**
* 接受操作
*/
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}

/