组合模式(Composite)通常用于构建树形结构。
下面以文件系统简单说明组合模式。
/**
* 抽象节点类
*/
public abstract class Node {
private String name;
public Node(String name) {
this.name = name;
}
protected abstract void addChild(Node child);
protected void display(int space) {
for (int i = 0; i < space; i++) {
System.out.print(" ");
}
System.out.println(name);
}
}
/**
* 文件类
*/
public class File extends Node {
public File(String name) {
super(name);
}
@Override
protected void addChild(Node child) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void display(int space) {
super.display(space);
}
}
/**
* 文件夹类
*/
public class Folder extends Node {
private List<Node> children = new ArrayList<Node>();
public Folder(String name) {
super(name);
}
@Override
protected void addChild(Node child) {
children.add(child);
}
protected void display(int space) {
super.display(space);
space++;
for (Node child : children) {
child.display(space);
}
}
}
public class Test {
public static void main(String[] args) {
Node driveD=new Folder("D:");
Node doc=new Folder("我的文件");
doc.addChild(new File("红楼梦.pdf"));
doc.addChild(new File("西游记.pdf"));
Node sc=new Folder("私密文件");
sc.addChild(new File("我的女房东.avi"));
doc.addChild(sc);
driveD.addChild(doc);
Node downLoad=new Folder("下载");
downLoad.addChild(new File("三国演绎.pdf"));
driveD.addChild(downLoad);
driveD.display(0);
}
}