1. 概念
将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。树的结构-》组合设计模式
2. 使用场景
需要表示一个对象整体或部分层次
让客户端能够忽略不同对象层次的变化
3. 实例
public abstract class File {
private String name;
public File(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void watch();
public void add(File file) {
throw new UnsupportedOperationException();
}
public void remove(File file) {
throw new UnsupportedOperationException();
}
public File getChild(int pos) {
throw new UnsupportedOperationException();
}
}
public class Folder extends File {
private List<File> files;
public Folder(String name) {
super(name);
files = new ArrayList<File>();
}
@Override
public void watch() {
StringBuffer fileName = new StringBuffer();
for (File file : files) {
fileName.append(file.getName() + ":");
}
System.out.println(getName() + "文件夹, " + files.size() + "个文件, " + fileName);
}
@Override
public void add(File file) {
files.add(file);
}
@Override
public void remove(File file) {
files.remove(file);
}
@Override
public File getChild(int pos) {
return files.get(pos);
}
}
public class TextFile extends File {
public TextFile(String name) {
super(name);
}
@Override
public void watch() {
System.out.println(getName() + "文本文件");
}
}
public class Client {
public static void main(String[] args){
TextFile textFileA = new TextFile("a.txt");
TextFile textFileB = new TextFile("b.txt");
TextFile textFileC = new TextFile("c.txt");
textFileA.watch();
Folder folder = new Folder("学习资料");
folder.add(textFileA);
folder.add(textFileB);
folder.add(textFileC);
folder.watch();
folder.getChild(1).watch();
}
}
4. 特性
高层模块调用简单
节点自由增加
5. 在android中的运用
view的结构是树形结构