# Observer Pattern

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

## Repair

- Refactored by: Introduce Observer/Event Publisher
- Detected by: direct calls to multiple listeners
- Violated by: hardcoded notification targets
- Measured by: subscriber coupling count
- Enforced by: event contract tests

## requires

- [Subject/Subscriber Contract](https://banes-lab.com/records/lex/subject-subscriber-contract.md)

## reinforces

- [Event-Driven Architecture](https://banes-lab.com/records/arch/event-driven-architecture.md)

## enables

- [Decoupled Notification](https://banes-lab.com/records/lex/decoupled-notification.md)

## conflicts-with

- [Direct Callback Coupling](https://banes-lab.com/records/lex/direct-callback-coupling.md)

## tensions-with

- [Ordering](https://banes-lab.com/records/lex/ordering.md)
- [Debuggability](https://banes-lab.com/records/lex/debuggability.md)

## tensions

- [Observer Pattern Ordering](https://banes-lab.com/records/tension/observer-pattern-ordering.md)
- [Observer Pattern Debuggability](https://banes-lab.com/records/tension/debuggability-observer-pattern.md)
