在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。
通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。
根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
假如某个学科接受访问者访问
package com.ceshi20; public interface Subject { public void accept(Visitor visitor); public String getSubject(); }
package com.ceshi20; public class MySubject implements Subject{ @Override public void accept(Visitor visitor) { visitor.visit(this); } @Override public String getSubject() { return "化学物理"; } }
package com.ceshi20; public interface Visitor { public void visit(Subject sub); }
package com.ceshi20; public class MyVisitor implements Visitor{ @Override public void visit(Subject sub) { System.out.println("访问课程:"+sub.getSubject()); } }
package com.ceshi20; public class Test { public static void main(String[] args) { Visitor visitor = new MyVisitor(); Subject sub = new MySubject(); sub.accept(visitor); } }
运行结果:
之后如果有其他课程,新建实现类即可。
该模式适用场景:如果我们想为一个现有的类增加新功能,不得不考虑几个事情:
1、新功能会不会与现有功能出现兼容性问题?
2、以后会不会再需要添加?
3、如果类不允许修改代码怎么办?
面对这些问题,最好的解决方法就是使用访问者模式,访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦