VisitPattern

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;
 }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值