visit pattern的目的是为了把对数据结构的处理从数据结构中抽象出来,比如书中的例子:
directory,file是一种数据结构,他们实现了accept接口,表面具有接受visit的能力。
visit则是具有处理数据能力的类的接口,接口必须要明白他所要处理的对象的详细信息。比如例子中visit必须要知道实现了entry接口的类有file和directory。
P178页,结城浩说在visit的visit方法中,必须要交替使用accept方法和visit方法来交替使用来实现递归,但是也可以使用下面的方法,只是用visit方法来避免递归。
使用下面的方法优点:只是用visit方法来实现递归,比较清晰。
缺点:1,增加的代码量。
2,或许还有别的缺陷,暂时没有想到。
package lv.multiThread.VisitorPattern;
import java.util.Iterator;
public class VisitorList extends Visitor {
private String currentdir = "";
public void visit(File file) {
System.out.println(currentdir + "/" + file);
}
public void visit(Directory directory) {
System.out.println(currentdir + "/" + directory);
String savedir = currentdir;
currentdir = currentdir + "/" + directory.getName();
Iterator<Entry> it = directory.iterator();
// while (it.hasNext()) {
// Entry entry = it.next();
// entry.accept(this);
// }
while (it.hasNext()) {
Entry entry=it.next();
if(entry instanceof File )
visit((File)entry);
if(entry instanceof Directory )
visit((Directory)entry);
}
currentdir = savedir;
}
}
2042

被折叠的 条评论
为什么被折叠?



