# Visitor Pattern

Record: `arch:visitor-pattern`
Kind: pattern
Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)
Severity: contextual
Scope: behavior, operation, type hierarchy
Canonical: https://banes-lab.com/ontology#arch-visitor-pattern

## Repair

- Refactored by: Introduce Visitor
- Detected by: type-tag switches repeated per operation
- Violated by: operations added by editing every element type
- Measured by: type-switch duplication across operations
- Enforced by: [design review](https://banes-lab.com/records/arch/design-review.md)

## requires

- [Stable Element Hierarchy](https://banes-lab.com/records/lex/stable-element-hierarchy.md)

## reinforces

- [Open/Closed Principle (OCP)](https://banes-lab.com/records/arch/open-closed.md)
- [Separation of Concerns](https://banes-lab.com/records/arch/separation-of-concerns.md)

## enables

- [Operation Extension Without Element Change](https://banes-lab.com/records/lex/operation-extension-without-element-change.md)

## conflicts-with

- [Type-Switch Dispatch](https://banes-lab.com/records/lex/type-switch-dispatch.md)

## tensions-with

- [Element Stability](https://banes-lab.com/records/lex/element-stability.md)

## tensions

- [Visitor Pattern Element Stability](https://banes-lab.com/records/tension/element-stability-visitor-pattern.md)
