A pattern documents a concrete reusable solution to a recurrent archi-
tectural problem. Several “pattern libraries” have already been defined
(Gamma et al . 1995); by “library” we mean a document (e.g. a book or a
paper) that describes one or more design patterns. The developer selects the
design pattern which is most applicable to the problem in question, and
reuses the corresponding solution. The context and problem sections of the
pattern make it easy for the developer to retrieve the right pattern.
Patterns cover the range from analysis and overall program architecture
(architectural patterns), to class and component design (design patterns),
up to very specific details of physical design or implementation (idioms).
Since patterns are concrete representations of domain expertise, they
greatly raise the level of communication between designers working
together. Each pattern is given a name, capturing its essence; the pattern
name becomes part of the designers' vocabulary allowing them to refer to
complex problems and solutions with a single word, with no possibility of
misunderstanding. Patterns are applicable not only to design but also to
Unfortunately, design patterns do not support code reuse in a systematic
way as class libraries: the Implementation paragraph is very often missing or
it just sketches a description in a high-level language.
Patterns will be presented according the following schema:
The context where a design problem has emerged
The design problem to solve
Forces or tradeoffs
The forces in action that cause the problem and
define the context
An operational description of how to solve the
An example showing how to apply the solution
The effect of applying the solution, in terms of
both new resulting forces and modified context
The motivation for using the techniques adopted
in the solution
Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1995) Design Patterns: Elements
of Reusable Object-Oriented Software , Addison-Wesley.
Sun Microsystems, Code Conventions for the Java Programming Language avail-
able at http://java.sun.com/docs/codeconv/.