Changes behavior according to object state.

Boundary protecting internal implementation details.

Object defined by its value rather than identity.

Limits how long an operation may run.

Represents and evaluates language grammar.

Layer hiding lower-level implementation details.

Cluster of domain objects treated as one unit.

Alternative behavior when primary operation fails.

Supplies dependencies from outside a component.

Rules governing application behavior.