Define the FileSystemVisitor interface, and a concrete class to implement it that prints out file and directory names and visits directory children.
public interface FileSystemNode
{
public void accept(FileSystemVisitor fsv)
}
public class FileNode implements FileSystemNode
{
private String fileName;
public FileNode(String name)
{
fileName = name;
}
public String getName()
{
return fileName;
}
public void accept(FileSystemVisitor fsv)
{
fsv.visitFileNode(this);
}
}
import java.util.ArrayList;
public class DirectoryNode implements FileSystemNode
{
private String directoryName;
private ArrayList<FileSystemNode> children;
public FileNode(String name)
{
directoryName = name;
children = new ArrayList<FileSystemNode>();
}
public String getName()
{
return directoryName;
}
public void addChild(FileSystemNode fsn)
{
children.add(fsn);
}
public ArrayList<FileSystemNode> getChildren()
{
return new ArrayList<FileSystemNode>(children);
}
public void accept(FileSystemVisitor fsv)
{
fsv.visitDirectoryNode(this);
}
}