组合模式适用于特殊的场景,在这种场景下对象是按照树的方式组织的。
例子
例如说文件和文件夹,一个根目录下有若干文件夹和文件,每个文件夹下又有若干文件夹和文件,文件是叶子节点。例如说统计文件夹下的文件数量
class Node {
final private String path;
public Node(String path) {
this.path = path;
}
public abstract int countNum();
public boolean isFile() {
return true;
}
}
class File extends Node {
public File(String path) {
super(path);
}
public int countNum() {
return 1;
}
}
class Directory extends Node {
private List<Node> nodes = new ArrayList();
public Directory(String path) {
super(path);
}
public void addNode(Node node) {
nodes.add(node);
}
public boolean isFile() {
return false;
}
public int countNum() {
int count = 0;
for (Node node : nodes) {
count += node.contNum();
}
return count;
}
}
小结
文件的典型例子诠释了组合模式,对于组合模式,可以看出一种特定的数据结构和算法。
网友评论