在访问者模式(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); } }
运行结果:ide
以后若是有其余课程,新建实现类便可。this
该模式适用场景:若是咱们想为一个现有的类增长新功能,不得不考虑几个事情:
一、新功能会不会与现有功能出现兼容性问题?
二、之后会不会再须要添加?
三、若是类不容许修改代码怎么办?
面对这些问题,最好的解决方法就是使用访问者模式,访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦