目录
1.Visitor模式
1.1 作用
该模式是为了将数据结构与处理分离开来, 编写一个表示"访问者"的类来访问数据结构中的元素, 并把对各元素的处理交给访问者类, 当需要增加对数据结构新的处理方式时, 只需要编写新的访问者, 然后让数据结构可以接受访问者的访问即可.
1.2 示例程序
示例程序使用Composite模式中的那个文件和文件夹的例子作为访问者要访问的数据结构.
1.2.1 示例程序类图
1.2.2 Visitor抽象类
//表示访问者的抽象类
public abstract class Visitor {
public abstract void visit(File file);//访问文件
public abstract void visit(Director director);//访问文件夹
}
1.2.3 Element接口
//接收访问者访问的接口
public interface Element {
public abstract void accept(Visitor v);//表示访问者v在当问当前对象
}
1.2.4 文件及文件夹类
//文件和文件夹的父类,目录条目抽象类
public abstract class Entry implements Element{
public abstract String getName();//名字
public abstract int getSize();//大小
public abstract Entry add(Entry entry);//向文件夹内添加文件
public abstract Iterator iterator();//想访问者提供一个获取迭代器的方式
@Override
public String toString() {
return getName() + "(" + getSize() + ")";
}
}
//文件类
public class File extends Entry{
private String name;
public int size;
public File(String name, int size) {
this.name = name;
this.size = size;
}
@Override
public String