What are design patterns?  A design pattern is a re-usable form of a solution to a design problem.  They come about from experiencing similar design problems repeatedly and discovering a novel way to solve for them, the design pattern.  Hence design problems are not discovered, but rather forged through the act of solving design problems.

Why learn them?

Design patterns provide many benefits that we can take advantage of.

Don’t reinvent the wheel

We often run into similar problems that we have solved previously, our colleagues have seen before, and that others around the world have

Common language

By knowing and naming design patterns we can more easily communicate with other software professionals.  Rather than having to explain the entire concept, we can simply identify the pattern by its name and we will have communicated our intent much more simply.

Patterns

Patterns can be organized into three main groups based on how they are used.  The groups are creational, structural and behavioral.

Creational Patterns

Creational design patterns help abstract the instantiation process.

Structural Patterns

Structural patterns help with how classes and objects are composed to form larger structures.

Behavioral Patterns

Behavioral patterns are concerned with algorithms and the assignment of responsibilities between objects.