import java.util.ArrayList;
import java.util.List;
abstract class AbstractFile { // (1)
protected String name;
public void printName() {
System.out.println(name);
}
public abstract boolean addChild(AbstractFile file);
public abstract boolean removeChild(AbstractFile file);
public abstract List<AbstractFile> getChildren();
}
class File extends AbstractFile {
public File(String name) {
this.name = name;
}
public boolean addChild(AbstractFile file) {
return false;
}
public boolean removeChild(AbstractFile file) {
return false;
}
public List<AbstractFile> getChildren() {
return null; // (2) 文件没有子节点
}
}
class Folder extends AbstractFile {
private List<AbstractFile> childList;
public Folder(String name) {
this.name = name;
this.childList = new ArrayList<AbstractFile>();
}
public boolean addChild(AbstractFile file) {
return childList.add(file);
}
public boolean removeChild(AbstractFile file) {
return childList.remove(file);
}
public List<AbstractFile> getChildren() { // (3)
return childList; // (4)
}
}
public class Client {
public static void main(String[] args) {
// 创造一个树形的文件/目录结构
AbstractFile rootFolder = new Folder("c:\\");
AbstractFile compositeFolder = new Folder("composite");
AbstractFile windowsFolder = new Folder("windows");
AbstractFile file = new File("TestComposite.java");
rootFolder.addChild(compositeFolder);
rootFolder.addChild(windowsFolder);
compositeFolder.addChild(file);
// 打印目录文件树
printTree(rootFolder);
}
private static void printTree(AbstractFile ifile) {
ifile.printName();
List<AbstractFile> children = ifile.getChildren();
if (children == null) return; // 注意:children 不能大写
for (AbstractFile file : children) {
printTree(file); // (5) 递归打印子树
}
}
}
2009年下半年
最新推荐文章于 2025-08-06 16:23:50 发布