# Composite Pattern

Record: `arch:composite-pattern`
Kind: pattern
Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)
Severity: recommended
Scope: structure, tree, hierarchy
Canonical: https://banes-lab.com/ontology#arch-composite-pattern

## Repair

- Refactored by: Unify Leaf and Composite behind one interface
- Detected by: isContainer/isLeaf conditionals during traversal
- Violated by: callers branching on leaf-vs-container at every node
- Measured by: node-kind conditional count
- Enforced by: [design review](https://banes-lab.com/records/arch/design-review.md)

## requires

- [Uniform Component Interface](https://banes-lab.com/records/lex/uniform-component-interface.md)

## reinforces

- [Uniform Interface](https://banes-lab.com/records/arch/uniform-interface.md)
- [Open/Closed Principle (OCP)](https://banes-lab.com/records/arch/open-closed.md)

## enables

- [Recursive Composition](https://banes-lab.com/records/lex/recursive-composition.md)
- [Leaf/Composite Transparency](https://banes-lab.com/records/lex/leaf-composite-transparency.md)

## conflicts-with

- [Leaf-vs-Container Special-Casing](https://banes-lab.com/records/lex/leaf-vs-container-special-casing.md)

## tensions-with

- [Type Safety](https://banes-lab.com/records/arch/type-safety.md)

## tensions

- [Composite Pattern Type Safety](https://banes-lab.com/records/tension/composite-pattern-type-safety.md)
