Allows objects to receive notifications about changes.

Architecture centered around events and event handlers.

Five principles for maintainable object-oriented design.

Encapsulates interchangeable algorithms.

Model where clients request services from servers.

A component should have one primary responsibility.

Represents an operation as an object.

Model where systems communicate as peers without a central server.

Variable or method belonging to a class or object.

Components should be extendable without unnecessary modification.