访问者模式适用于数据结构相对稳定但算法易于变化的系统。简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者添加新的操作而无需做其他的修改效果。
package mode.visitor;
/**定义被访问对象的接口,这里在接口中定义了accept方法,用来接收不同的visitor实体,做不同的访问工作;
* 同时在接口中定义了subject属性的get和set方法。
*
* */
public interface Subject {
public void accept(Visitor visitor);
public String getSubject();
public void setSubject(String subject);
}
package mode.visitor;
/**
*
* 定义一个实际的被访问对象,实现接口中的所有方法
*
* */
public class MySubject implements Subject {
private String subject;
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
@Override
public String getSubject() {
// TODO Auto-generated method stub
return this.subject;
}
@Override
public void setSubject(String subject) {
this.subject = subject;
}
}
package mode.visitor;
/**
*
* 定义访问者的接口,有一个visit方法用来访问被访问对象
*
* */
public interface Visitor {
public void visit(Subject subject);
}
package mode.visitor;
/**
*
* 定义一个具体的visitor,实现具体的visit方法
*
* */
public class MyVisitor implements Visitor {
@Override
public void visit(Subject subject) {
subject.setSubject("test");
System.out.println(subject.getSubject());
}
}
测试
package mode.visitor;
public class Test {
public static void main(String[] args) {
Visitor visitor = new MyVisitor();
Subject sub = new MySubject();
sub.accept(visitor);
}
}