Supplying required dependencies from outside a component.

Provides an intermediary controlling access to another object.

System whose components run across multiple computers.

Giving control of program flow to a framework or container.

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.