您的位置:首页 > 编程语言 > Java开发

设计模式--访问者模式

2016-04-09 00:00 267 查看
摘要: 简单记录访问者模式的使用。

访问者模式(visitor):

把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。

访问者模式应用的场景:

适用于数据结构相对稳定算法又易变化的系统,把数据结构和算法解耦。

访问者模式的优点:

增加操作很容易,因为增加操作意味着增加新的访问者。
访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。

访问者模式的缺点:

增加新的数据结构很困难。

简单概括访问者模式:

是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。

示例:

访问者模式测试类VisitorTest.java

/**
* 访问者模式测试类
*
* @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.java

/**
* 主题接口
*
* @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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息