This is the The Gang of Four's template. View and save this page's source from your web browser. It includes examples of useful HTML formatting commands.

Pattern Name (Scope, Purpose)

The pattern's name conveys the essence of the pattern succinctly. A good name is vital, because it will become part of your design vocabulary.

Intent

A short statement that answers the following questions: What does the design pattern do? What is its rationale and intent? What particular design issue or problem does it address?

Also Known As

Other well-known names for the pattern, if any.

Motivation

A scenario that illustrates a design problem and how the class and object structures in the pattern solve the problem. The scenario will help you understand the more abstract description of the pattern that follows.

Applicability

What are the situations in which the design pattern can be applied? What are examples of poor designs that the pattern can address? How can you recognize these situations?

Structure

Participants

The classes and/or objects participating in the design pattern and their responsibilities.

Participant Name

Collaborations

How the participants collaborate to carry out their responsibilities.

Consequences

How does the pattern support its objectives? What are the trade-offs and results of using the pattern? What aspect of system structure does it let you vary independently?

  1. A consequence bullet. Description of consequence

Implementation

What pitfalls, hints, or techniques should you be aware of when implementing the pattern? Are there language-specific issues?

  1. An implementation Bullet. Description of Bullet

Sample Code and Usage

Code fragments that illustrate how you might implement the pattern in C++ or Smalltalk. Program Listing

Known Uses

Examples of the pattern found in real systems. We include at least two examples from different domains.

Related Patterns

What design patterns are closely related to this one? What are the important differences? With which other patterns should this one be used?
Your Name (yourname@host.domain). Last updated on Todays Date