# State Pattern

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

## Repair

- Refactored by: Replace State-Conditional with State objects
- Detected by: repeated conditionals on a status field
- Violated by: behavior branched on scattered status flags
- Measured by: status-conditional density
- Enforced by: [design review](https://banes-lab.com/records/arch/design-review.md)

## requires

- [Explicit State Model](https://banes-lab.com/records/lex/explicit-state-model.md)

## reinforces

- [Open/Closed Principle (OCP)](https://banes-lab.com/records/arch/open-closed.md)
- [Polymorphism](https://banes-lab.com/records/arch/polymorphism.md)

## enables

- [State-Local Behavior](https://banes-lab.com/records/lex/state-local-behavior.md)
- [Legal-Transition Enforcement](https://banes-lab.com/records/lex/legal-transition-enforcement.md)

## conflicts-with

- [Boolean Flag Soup](https://banes-lab.com/records/lex/boolean-flag-soup.md)

## tensions-with

- [Class Proliferation](https://banes-lab.com/records/lex/class-proliferation.md)

## tensions

- [State Pattern Class Proliferation](https://banes-lab.com/records/tension/class-proliferation-state-pattern.md)

## referenced-by

- [Finite State Machine](https://banes-lab.com/records/arch/finite-state-machine.md)
