Buschmann et al (1996): Architectural Patterns

Architectural Patterns are very high-level strutural patterns.

From Mud to Structure

Organize components.

Layers Organize components into layers where layer i's services are only used by layer i+1.
Pipes and Filters Divide the task into several sequential processing steps -- the output of task i is the input of task i+1.
Blackboard Several independent programs work cooperatively on a common data structure.

Distributed Systems

Handle distributed computation.

Broker Introduce a broker component to to achieve better decoupling of clients and servers -- brokers accept requests from clients and forward the requests to servers, then return the results back to the clients.

Interactive Systems

Keep a program's functional core independent of the user interface.

Model - View - Controller Divides the application into processing, output, and input. View and controller parts are usually observers of the model via the observer pattern.
Presentation - Abstract - Control Divides the application up to heirarchies or MVC-like components. Each component is dependent upon and and provides functionality for the a higher-level component. There is only one top-level component.

Adaptable Systems

Design for change.

Microkernel Encapsulate the fundamental services of the application.
Reflection Divide the application into a meta-level and a base level to make the application "self-aware". The meta level encapsulates knowledge of the system; the base level encapsulates knowledge about the problem domain.