Pattern-Oriented Sofware Archicture--A System of Patterns


By: F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal
Published in: Wiley, 1996

Summary: A collection of patterns that spans several levels of abstraction but concentrates on software architecture.

Pattern: Layers

Pages: 31-51

Structure an application to be decomposed into groups of subtasks where each group is at a given level of abstraction.

Category: Architectural, Networks

Pattern: Pipes & Filters

Pages: 53-70

For systems that process a stream of data. Each processing step is encapsulated in a filter component. Data passes through pipes that connect filters. Combining filters produces families of related systems.


Category: Architectural

Pattern: Blackboard

Pages: 71-95

For problems with no deterministic solutions, use several specialized subsystems to assemble knowledge to build a partial solution.

Category: Architectural

Pattern: Broker

Pages: 99-124

Produce distributed software systems with decoupled components that interact by remote service invocations. The broker coordinates communication, e.g., forwards requests, transmits results and exceptions.

Category: Architectural, Distributed Systems

Pattern: Model-View-Controller

Pages: 125-143

Divide an interactive application into three components. The model contains the core functionality and data. Views display information to the user. Controllers handle user input. Views and controllers together comprise the user interface. A change-propagation mechanism ensures consistency between the user interface and the model.

Category: Architectural

Pattern: Presentation-Abstraction-Control

Pages: 145-168

Define a hierarchy of cooperating agents to structure interactive software systems. Each agent is responsible for an aspect of the application's functionality and consists of three components: presentation, abstraction, and control. These components separate human-computer aspects of the agent from its functional core and its communication with other agents.

Category: Architectural

Pattern: Microkernel

Pages: 171-191

For software systems that must adapt to changing system requirements, separate a minimal functional core from extended functionality and customer-specific parts. The microkernel is a socket for plugging in these extensions and coordinating their collaboration.

Category: Architectural

Pattern: Reflection

Pages: 193-219

Split the application into two parts: (1) a meta level provides information about selected system properties and makes the software self-aware; (2) a base level builds on the meta level and includes the application logic. Changes to the meta level affect base level behavior. This allows the system to dynamically change structure and behavior.

Category: Architectural

Pattern: Whole-Part

Pages: 225-242

An aggregate component (the whole) encapsulates constituent components (the parts), organizes their collaboration, and provides a common interface to the functionality. Direct access to the parts is not allowed.

Category: Structural

Pattern: Master-Slave

Pages: 245-260

Handle computation of replicated services in a system to achieve fault tolerance and robustness. Separate independent slave components that together provide the same service to a master component, which is responsible for invoking them and for selecting a result. Clients communicate only with the master.

Category: Architectural

Pattern: Proxy

Pages: 263-275

Contains: Proxy [Gamma+95],

Pattern: Command Processor

Pages: 277-290

Separates the request for a service from its execution, manages requests as separate objects, schedules their execution, and provides additional services, e.g., storing request objects for a later undo.


Category: Behavioral

Pattern: View Handler

Pages: 291-303

Manage all views of a software system and allow clients to open, manipulate, and dispose of views. Coordinate dependencies between views and organize updates.

Category: GUI Development

Pattern: Forwarder-Receiver

Pages: 307-322

Provide transparent interprocess communication for software systems with a peer-to-peer interaction model. Forwarders and receivers decouple peers from the underlying communication mechanisms.

Category: Communications, Distributed Systems

Pattern: Client-Dispatcher-Server

Pages: 323-337

A dispatcher component is an intermediary between clients and servers. The dispatcher provides location transparency with a name service and hides details of the communication connection.

Category: Client-Server, Communications, Distributed Systems

Pattern: Publisher-Subscriber

Pages: 339-343

Keep the state of cooperating components synchronized by enabling one-way propagation of changes. One publisher notifies any number of subscribers about changes to its state.

Category: Behavioral

Pattern: Counted Pointer

Pages: 353-358

Improves memory management of dynamically allocated, shared objects in C++ by introducing a reference counter to a body class updated by handle objects. Clients access body class objects only through handles. This pattern was first described in [Coplien92] and later expanded in [Coplien99c]

Category: C++ Idioms