A pattern language is a pattern catalog where each pattern is linked to those other patterns it is related to, such that the consideration of one pattern automatically leads to alternatives and complements.
The original idea by Christopher Alexander was somewhat different to the notion of a pattern language presented here. A pattern language in Alexander’s sense interconnects the patterns in a way that forms a step-by-step guide for a designer. The patterns form a decomposition structure that comprises all relevant problems that occur during design. It precisely determines which design decisions to take in which order.
Alexander claims to have constructed a complete pattern language for architecture. So using his pattern language a layperson should be able to make all design decisions necessary to design a room, a house and even towns and regions 1).
It is doubtful whether such a pattern language is possible for general-purpose software design (although there are some special-purpose pattern languages in this sense). However it is useful to interconnect several pattern descriptions. For solving a concrete design problem, not only one pattern might be considered but several alternatives. Furthermore patterns are often not applied in isolation but combinations of several patterns are used to solve more complex problems. Therefore it is helpful, when a pattern description refers to possible alternatives as well as to complementary patterns the pattern may be combined with. By doing so, a network of patterns is created that forms a more realistic kind of pattern language. The definition here covers this broader meaning which differs from the narrower, more demanding “Alexanderish” pattern language notion. the broader notion is sometimes also referred to as “pattern system”.
Discuss this wiki article and the term on the corresponding talk page.