Design patterns: elements of reusable architectures

The notion of a pattern is based on the work of Christopher Alexander, a building architect, and his attempt to capture solutions to recurring problems. The extension of this idea to software provides a new look at reuse and the power of improved communication through a well-defined vocabulary employing successful solutions to recurring design problems. Introduction In the late 1970's, two books appeared, written by Christopher Alexander and his colleagues, who are building architects. These books; "The Timeless Way of Building" [1] and "A Pattern Language" [2], presented the author's view of the recurring problems he saw in building cities and towns, neighborhoods and buildings. Alexander describes these problems and their solutions using an expression he called a pattern[2]: "Each pattern describes a problem that occurs over and over again in our environment and then describes the core of the solution to that problem in such a way that you can use this solution a million times over without ever doing it the same way twice." It's a sad commentary on the field of software engineering that papers written over twenty years ago and papers written yesterday typically both begin by lamenting the fact that software products are over budget, delivered late or not at all, with serious concerns about their quality and reliability. Unfortunately, software engineering gets little help from its underlying discipline, computer science. One common response to this dilemma is to look carefully at other, more mature engineering fields for guidance. We look at hardware engineering, manufacturing technologies, the list goes on. After examining the field of building architecture and the work of Christopher Alexander, investigators have been observing similar recurring problems and solutions in software. There is clear evidence of patterns in all levels of software design, from high-level architecture down to detailed design.