组合模式的一个典型应用比如系统的文件系统,文件系统里面有文件和目录,目录里面又有文件。组合模式适合把文件和目录“组合”在一起。File代表文件,Dir代表目录,Component代表一种文件和目录共有的抽象。
public abstract class Component {
public abstract String getName();
public abstract void add(Component c);
public abstract void remove(Component c);
public abstract void info();
}
File代表一个普通文件:
public class File extends Component {
private String name;
public File(String name) {
= name;
}
@Override
public void add(Component entry) {
}
@Override
public void remove(Component entry) {
}
@Override
public String getName() {
return name;
}
@Override
public void info() {
System.out.println(name);
}
}
Dir代表一个目录:
import java.util.ArrayList;
import java.util.Iterator;
public class Dir extends Component {
private ArrayList<Component> list = new ArrayList<Component>();
private String name;
public Dir(String name) {
= name;
}
@Override
public String getName() {
return name;
}
@Override
public void add(Component c) {
list.add(c);
}
@Override
public void remove(Component c) {
list.remove(c);
}
@Override
public void info() {
System.out.println(name + "/");
Iterator it = list.iterator();
while (it.hasNext()) {
Component c = (Component) it.next();
System.out.print(name + "/");
();
}
}
}
测试:
public class Demo {
public Demo() {
File f1 = new File("f1");
File f2 = new File("f2");
Dir d1 = new Dir("d1");
d1.add(f1);
d1.add(f2);
File f3 = new File("f3");
Dir dir = new Dir("dir");
dir.add(d1);
dir.add(f3);
();
}
public static void main(String[] args) {
new Demo();
}
}
输出:
dir/
dir/d1/
d1/f1
d1/f2
dir/f3