组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。它的核心结构有三个角色:组合角色(Component)、内容角色(Leat)、复合物角色(Composite)。本文中使用一个文管理的例子,在计算机中,有目录的概念,目录下可以放子目录,也可以放文件,同样子目录下也可以放目录,可以放文件,这样文件夹是形成了一种递归结构。文件夹和文件组合起来就是组合模式。
类图 示例父类Entry
public abstract class Entry {
protected abstract String getName();
protected abstract void display(String prefix);
}
子类File
public class File extends Entry{
protected String name;
public File(String name){
this.name = name;
}
@Override
protected String getName() {
return name;
}
@Override
protected void display(String prefix) {
System.out.println(prefix + "/" + name);
}
}
子类Directory
public class Directory extends Entry {
private List entries = new ArrayList<>();
protected String name;
public Directory(String name){
this.name = name;
}
@Override
protected String getName() {
return name;
}
public void add(Entry entry){
entries.add(entry);
}
@Override
protected void display(String prefix) {
System.out.println(prefix + "/" + name);
Iterator iterator = entries.iterator();
while (iterator.hasNext()){
Entry entry = (Entry) iterator.next();
entry.display(prefix + "/" + name);
}
}
}
客户端
public static void main(String[] args) {
Directory root = new Directory("root");
Directory lib = new Directory("lib");
Directory usr = new Directory("usr");
Directory var = new Directory("var");
var.add(new File("test.jpg"));
var.add(new File("test1.doc"));
usr.add(new Directory("bin"));
usr.add(new Directory("tmp"));
var.add(new Directory("tmp"));
root.add(lib);
root.add(usr);
root.add(var);
root.display("");
}



