前言
适用于树形结构,如公司的组织架构,目录和文件夹
UML类图

代码示例
java
package com.sw.learn.pattern.C_structre.c_composite;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
// 抽象组件
interface FileSystemComponent {
void display(String indent);
}
// 叶子节点
class File implements FileSystemComponent {
private String name;
public File(String name) {
this.name = name;
}
public void display(String indent) {
System.out.println(indent + "- File: " + name);
}
}
// 容器节点
class Directory implements FileSystemComponent {
private String name;
private List<FileSystemComponent> children = new ArrayList<>();
public Directory(String name) {
this.name = name;
}
public void add(FileSystemComponent component) {
children.add(component);
}
public void display(String indent) {
System.out.println(indent + "+ Directory: " + name);
for (FileSystemComponent c : children) {
c.display(indent + " ");
}
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
Directory root = new Directory("root");
root.add(new File("file1.txt"));
root.add(new File("file2.txt"));
Directory subDir = new Directory("sub");
subDir.add(new File("file3.txt"));
root.add(subDir);
root.display("");
}
}