Design patterns are architectural solutions to commonly occurring problems in software design. It is important to note that design patterns are not methods nor algorithms. They are architectural constructs that provide a way of organizing classes and their relationship to achieve better results in code maintainability. Even if you didn't use a design pattern before, you most probably had invented one on your own. Many problems tend to recur in software design. For example, making a better interface for an existing library is a form of a design pattern known as facade. Design patterns have names so that programmers use them in conversations or documentation. It should be natural for you to chit-chat with fellow programmers using facades, factories, and the like.
We've previously mentioned that domain-driven design incorporates repository and...