一、核心思想
操作改变,数据结构不变。
访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可以为一个已存在的类或类群增加新的操作而无需做其它的修改的效果。
组成结构:
访问者接口Visitor:
访问者实现类MyVisitor:
被访问者接口:Subject:
被访问者实现类MySubject:
简单关系图:
来看看原码:一个Visitor类,存放要访问的对象,
- public interface Visitor {
- public void visit(Subject sub);
- }
- public class MyVisitor implements Visitor {
- @Override
- public void visit(Subject sub) {
- System.out.println("visit the subject:"+sub.getSubject());
- }
- }
Subject类,accept方法,接受将要访问它的对象,getSubject()获取将要被访问的属性,
- public interface Subject {
- public void accept(Visitor visitor);
- public String getSubject();
- }
- public class MySubject implements Subject {
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
- @Override
- public String getSubject() {
- return "love";
- }
- }
测试:
- public class Test {
- public static void main(String[] args) {
- Visitor visitor = new MyVisitor();
- Subject sub = new MySubject();
- sub.accept(visitor);
- }
- }
输出:visit the subject:love
二、何时使用
实用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作结合何以相对自由的演化。
优点:
//todo
缺点:
//todo
三、java中的应用
Java Annotation