|

Everyday, we see patterns in the environment around us. For example, you might note to a friend one day
that his house is exactly like yours, except that your house has a sunroof over the patio. Or that your car is
just like his, except his has a leather interior, gps navigation, and air conditioning.
Similarly, software developers encounter patterns in real-world application development. We see that the
code we wrote to solve some past software design problem could be reused to solve another, after a few
modifications. With that thinking, software developers-- most notably, the Group of Four-- established a
set of software design patterns.
Design patterns are solutions to commonly encountered software design problems that programmers often
face while developing real-world software applications. Due to software developers using and refining
design patterns over time, these solutions have evolved, becoming increasingly flexible and robust in
the process.

Design patterns are immensely useful to programmers. By reusing design patterns, we, as programmers,
are able to leverage the expertise of past programmers without being locked into a framework that's difficult to use or understand.
As well, design patterns provide a common lexicon for describing and discussing software systems with other software developers. Experienced software developers
know instinctively not only how and when to use design patterns but also know the traits inherent to each pattern. This alleviates the need to describe every detail when communicating the relationships between objects and the methods they contain.
Simply put, design patterns allow us to design software that is not only flexible and reusable, but also
provide us with the means to simplify communication with other software developers.
|