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 ```