试题六(共 15 分)
阅读下列说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
现欲构造一文件/目录树,采用组合(Composite)设计模式来设计,得到的类图如 6-1所示:

【Java 代码】
import java.util.ArrayList;
import java.util.List;
(1) class AbstractFile {
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 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 getChildren() { return (2) ; }
}
class Folder extends AbstractFile {
private List childList;
public Folder(String name) {
this.name = name;
this.childList = new ArrayList();
}
public boolean addChild(AbstractFile file) { return childList.add(file); }
public boolean removeChild(AbstractFile file) { return childList.remove(file); }
public (3) getChildren() { return (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 children = ifile.getChildren();
if(children == null) return;
for (AbstractFile file:children) {
(5) ;
}
}
}
该程序运行后输出结果为:
c:\
composite
TestComposite.java
Windows