[Original text by Yishay Mor]
The Design patterns paradigm (Alexander et al, 1977) was developed as a form of design language within architecture. This was done with the explicit aim of externalizing knowledge to allow the accumulation and generalization of solutions, and to allow all members of a community to participate in discussions relating to design. Alexander’s patterns were organized into a coherent system called a pattern language where the interrelations between individual patterns were articulated. The idea has been embraced in several other disciplines, starting with software engineering[1]. More recent examples of design pattern collections include hypermedia (c.f. German & Cowan 2000), interaction design (c.f. Erickson, 2000 and Borchers, 2001), and mergers of cinema studies and computer science (Walldius 2001), e-learning systems (Derntl & Motschnig-Pitrik, 2004), and the design of computer science courses (Bergin, 2000). These patterns and pattern languages have enabled designers to share, discuss and aggregate their knowledge across diverse communities.
The original definition of a design pattern positions it as a high-level method of design which specifies the context of discussion, the particulars of the problem, and how these can be addressed by the designated design instruments. In Pattern Languages Alexander writes:
Each pattern describes a problem which 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. (Alexander, 1977)
And in the Timeless Way of Building he describes the interelationships between pattern elements in more detail:
Each pattern is a three-part rule, which expresses a relation between a certain context, a problem, and a solution.
As an element in the world, each pattern is a relationship between a certain context, a certain system of forces which occurs repeatedly in that context, and a certain spatial configuration which allows these forces to resolve themselves.
As an element of language, a pattern is an instruction, which shows how this spatial configuration can be used, over and over again, to resolve the given system of forces, wherever the context makes it relevant. (Alexander, 1979, p 247).
[1] “One thing expert designers know not to do is solve every problem from first principles. Rather, they reuse solutions that have worked for them in the past. … Consequently, you’ll find recurring patterns of classes and communicating objects in many object-oriented systems. These patterns solve specific design problems and make … designs more flexible, elegant, and ultimately reusable. They help designers reuse successful designs by basing new designs on prior experience. A designer who is familiar with such patterns can apply them immediately to design problems without having to rediscover them” (Gamma et al., 1995, p1).



Recent Comments