In the past decade, patterns have become a popular way of expressing
reusable 'how-to' knowledge.
A pattern is essentially a named piece of advice on a possible solution
to a particular category of problem. For example: how do you store a collection
of variable size, or of variable-sized items (and supposing, for the sake
of the example, that you don't have a predefined library class that does
the job)? A designer might tell another "I made a Linked List for
these items"; using the name of the well-known pattern helps the colleague
immediately understand how the solution works, even though the exact details
of the implementation haven't been revealed.
Although it may incorporate a piece of program design, a pattern is
more than that. It incorporates advice on when it should be used, variations
that may be employed, pitfalls to look out for. A conventional layout for
patterns has evolved from debate, especially at the annual PLoP conferences
and at websites such as http://hillside.net/patterns/
In addition to the well-known 1994 book Design Patterns (Gamma,
et al), there are books on requirements analysis (e.g. Martin Fowler),
architecture (e.g. Buschmann et al), the software process (Ambler), and
project management (Coplien), all presented in the patterns style. A good
recent book by Mark Grand catalogues design patterns in UML and Java.
The patterns found in books are usually quite general, applicable to
a wide range of situations; but more specific patterns can be defined in
each project. Throughout a system or project, recurrent problems and solutions
can be found. Documenting and naming them helps maintain coherence across
the system, and through its history. A local pattern book forms an effective
way of bringing new designers on board.
A collection of patterns that integrate well together within a particular
context is known as a "pattern language". One view of a project architect's
job is that it is to define and promote the use of an appropriate pattern
language, that will integrate the work of a team of designers.
complete solutions for patterns
(consultancy, courses, workshops, mentoring, seminars, development)