访问者模式
package behaviroal.visitor;
/**
* 访问者模式
* 适用于数据结构相对未定的系统,把数据结构和作用于结构上的操作间的耦合解开
* @author zhangchy
*
*/
import java.util.ArrayList;
import java.util.List;
//利用多太
interface Visitor{
public void visit(NodeA A);
public void visit(NodeB B);
public void visit(NodeC C);
}
class CreateVisitor implements Visitor{
public void visit(NodeA A) {
// TODO Auto-generated method stub
A.operation();
}
public void visit(NodeB B) {
// TODO Auto-generated method stub
B.operation();
}
public void visit(NodeC C) {
// TODO Auto-generated method stub
C.operation();
}
}
//节点
abstract class Node{
public abstract void accept(Visitor v);
}
//节点 A
class NodeA extends Node{
@Override
public void accept(Visitor v) {
// TODO Auto-generated method stub
v.visit(this);
}
public void operation(){
System.out.println("A operation");
}
}
//节点B
class NodeB extends Node{
@Override
public void accept(Visitor v) {
// TODO Auto-generated method stub
v.visit(this);
}
public void operation(){
System.out.println("B operation");
}
}
//节点C
class NodeC extends Node{
@Override
public void accept(Visitor v) {
// TODO Auto-generated method stub
v.visit(this);
}
public void operation(){
System.out.println("C operation");
}
}
class ObjectStructures{
List<Node> nodeList = new ArrayList();
public void addNode(Node node){
nodeList.add(node);
}
public void action(Visitor v){
for(Node n:nodeList){
n.accept(v);
}
}
}
public class VisitorPattern {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Node n1 = new NodeA();
Node n2 = new NodeB();
Node n3 = new NodeC();
ObjectStructures obj = new ObjectStructures();
obj.addNode(n1);
obj.addNode(n2);
obj.addNode(n3);
Visitor v =new CreateVisitor();
obj.action(v);
}
}
浙公网安备 33010602011771号