Abstract Definition: Design patterns are ... patterns of software that help us accomplish extremely common challenges in application development.

Real life is full of patterns. Think, for example, of a lawyer who represents you in court. In a sense, he is a proxy for you - he represents your interests, but also has a very specific set of skills for doing so which you may not have. This is a widely used pattern throughout human life, whether parents represent children, diplomats represent countries, and so on.

Or, think of how human economies have developed over time. Traditionally we lived in small communities and each of us was responsible for managing his own land, producing his own food, and generally attaining the resources of life on his own resources. This required a lot of time.

Over time, we learned to divide up labor. Instead of everyone trying to do everything, individual groups specialised in something and became more efficient at it. This resulted in each “trade” becoming a kind of “factory” pattern. Namely, a pattern for producing a very specific product, and doing it very well.

Or, think of how our monitors represent to us what is going on in our computer, but are not the same thing as what’s going on in our computer. This is a representational pattern which we, again, find all over the place in technology and human life.

Design patterns represent these same kinds of patterns, but in code. Without using these patterns to solve common challenges, code fails to be flexible, changeable, and readable. It gets repetitive and messy.

Thus, I highly recommend reading into and benefiting from design patterns. It is well worth your time.