访问者模式(visitor):java
把数据结构和做用于结构上的操做解耦合,使得操做集合可相对自由地演化。
访问者模式应用的场景:算法
适用于数据结构相对稳定算法又易变化的系统,把数据结构和算法解耦。
访问者模式的优势:数据结构
增长操做很容易,由于增长操做意味着增长新的访问者。 访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。
访问者模式的缺点:数据结构和算法
增长新的数据结构很困难。
简单归纳访问者模式:ide
是一种分离对象数据结构与行为的方法,经过这种分离,可达到为一个被访问者动态添加新的操做而无需作其它的修改的效果。
示例:测试
访问者模式测试类VisitorTest.javathis
/** * 访问者模式测试类 * * @author Kevin * @date 2016-3-16 */ public class VisitorTest { public static void main(String[] args) { Visitor visitor = new VisitorImpl(); Subject subject = new SubjectImpl(); subject.accept(visitor); } }
主题接口类Subject.javacode
/** * 主题接口 * * @author Kevin * @date 2016-3-16 */ public interface Subject { /** * 更新主题 * * @author Kevin * @param visitor 访问者 */ void accept(Visitor visitor); /** * 获取主题 * * @author Kevin * @return 主题名称 */ String getSubject(); }
访问接口类Visitor.java对象
/** * 访问接口 * * @author Kevin * @date 2016-3-16 */ public interface Visitor { /** * 访问主题 * * @author Kevin * @param subject 主题 */ void visit(Subject subject); }
具体的主题类SubjectImpl.java接口
/** * 具体的主题 * * @author Kevin * @date 2016-3-16 */ public class SubjectImpl implements Subject { @Override public void accept(Visitor visitor) { visitor.visit(this); } @Override public String getSubject() { return "love"; } }
具体的访问者类VisitorImpl.java
/** * 具体的访问者 * * @author Kevin * @date 2016-3-16 */ public class VisitorImpl implements Visitor { @Override public void visit(Subject subject) { System.out.println("visit the subject: " + subject.getSubject()); } }