Design patterns not only help us to solve problems, but also gives us an assurance that the solutions will work and are stable, because these patterns have been tried and tested over the years by many other programmers. As we read earlier, design patterns are simple, and provide the best solutions to some of the common problems that developers face. Hence, they are more reliable than an ingenious solution to a problem that may have already been solved by others.
Any software problem can have many solutions, as depicted by the following diagram:
Some of these solutions might be innovatively new and use creative methods of finding an approach and a possible answer to a problem. Some solutions might be workable but not efficient. When it comes to deciding for the best approach for our current problem, we should first try to learn from the past, and understand how similar problems might have been solved by others. This is where design patterns come into picture.