Buschmann et al (1996): Design Patterns

Design Patterns are commonly-recurring structures of communicating components that solve a general design problem in a particular context (Gamma et al 1995).

Structure Decomposition

Decompose subsystems and complex components into cooperating parts.

Whole - Part Define a component that encapuslates smaller objects. Prevent clients from directly accessing the contained objects, but provide a interface for the aggregate.

Organization of Work

Components collaborate to solve complex problems.

Master - Slave The master divides a task among identical (but independant) slaves, the combines the slave's partial results to arrive a solution.

Access Control

Guard and control access to services and components.

Proxy Clients communicate with a representitive (proxy) rather than the target object itself. The proxy can perform pre- and post-processing to provide validation checking, access control, remote object access, extra computation, etc. See also Gamma et al's proxy pattern

Management

Handle homogenous collections of objects, services and components in their entirety.

Command Processor Extends Gamma et al's command pattern by adding an explicit commonad processor
View Handler Separate the the management of views from the code reequired to present or control specific views. Similar to Gamma et al's Abstract Factor and Mediator.

Communication

Organize communication between components.

Forward - Receiver Contain all system-specific communication functionality in seaparate components so distributed peers can communicate without loosing protability
Client - Dispatcher - Server A dispatcher acts as an intermediate layer between clients and servers. The dispatcher provides the communication channel and a name service to hide physical locations.
Publisher - Subscriber Same as Gamma et al's Observer pattern.