Explain the Composite pattern.
Topic: design-patterns, Structural Patterns. Level: Intermediate.
Answer
Composite lets you treat individual objects (leaves) and compositions of objects (nodes) **uniformly** through a common interface, forming a tree structure. Clients call the same method on a single item or a whole subtree without knowing the difference. Ideal for hierarchies: file systems (files/folders), UI component trees, org charts, menus.
```java
interface FileNode { int size(); } // common interface
class File implements FileNode { // leaf
private final int size;
File(int s){ size=s; }
public int size(){ return size; }
}
class Folder implements FileNode { // composite
private final List<FileNode> children = new ArrayList<>();
void add(FileNode n){ children.add(n); }
public int size(){ return children.stream().mapToInt(FileNode::size).sum(); }
}
Folder root = new Folder();
root.add(new File(10)); root.add(new File(20));
root.size(); // 30 — same call works on file or folder subtree
```