Adds operations without changing object structures.

Divide software by distinct responsibilities.

Object representing a domain concept with identity.

Repeats failed operations under controlled conditions.

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.