Древовидная структура: клиент работает с листьями и составными узлами единообразно через общий интерфейс.
interface Component { public function render(): string; }
class Leaf implements Component { public function render(): string { return "Leaf"; } }
class Composite implements Component {
private array $children = [];
public function add(Component $c): void { $this->children[] = $c; }
public function render(): string {
return implode('', array_map(fn($c) => $c->render(), $this->children));
}
}Примеры: дерево DOM, меню с подменю, файловая система.