访问者模式:
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
访问者:
public interface Visitor {
void visit(Course course);
}
访问者具体的实现:
public class VisitorImpl implements Visitor {
@Override
public void visit(Course course) {
System.out.println("course "+course.getName());
}
}
目标对象:
public abstract class Course {
String name;
public abstract void accept(Visitor visitor);
}
具体实现一:
@Data
public class CodingCourse extends Course{
int price;
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
具体实现二:
public class FreeCourse extends Course {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
测试类:
public class Main {
public static void main(String[] args) {
FreeCourse freeCourse = new FreeCourse();
freeCourse.setName("free course");
CodingCourse codingCourse = new CodingCourse();
codingCourse.setPrice(300);
codingCourse.setName("coding. course");
freeCourse.accept(new VisitorImpl());
codingCourse.accept(new VisitorImpl());
}
}
具体实现 可以参考 Spring中的 BeanDefinitionVisitor