Design Patterns

Design patterns are a relatively recent phenomenon that has caught the software development community by storm. Actually, design patterns have been around for a long time, it is discussing them that has been recent. However, the proper way to use them is often misunderstood.

Design patterns are solutions to problems that occur and recur, over and over again within a specific context. They arose out of the work of Christopher Alexander, a building architect. He discovered that quality architecture only occurred when certain characteristics were present. Which characteristics were required depended upon the problem at hand. That is, for a quality courtyard to be present, it requires (among other things) "a view out of it to some larger open space" (i.e., it should not be totally enclosed), while a pattern like an entranceway transition will have other characteristics.

The notion that quality architecture resulted from recurring implementations that were put in place due to recurring problems intrigued many top software designers. The thought that maybe we could do the same with software was compelling. If we could find the patterns that existed in software development, we could consistently produce high-quality software.

An investigation of this idea has resulted in several books that catalog where patterns are being used. The seminal book, Design Patterns: Elements of Reusable Object-Oriented Software by Gamma, Helm, Johnson and Vlissides (often referred to as the Gang of Four or simply GoF) catalogs 23 software design patterns that have been used in many places to solve specific problems.