It is agreed that design patterns can solve complexities and
problems in software design phases, but improper applicability of Design
Patterns can lead to bad designs that can facilitate software design errors. Be
very careful when using or applying design patterns. Do not use a pattern to
solve a problem that does not need it. Do not simply ornament software design
using a design pattern when it is not at all required in that context. Think twice
before you decide to use them in your design. Understand the scope of the
problem context and then search for a design pattern that best fits in that
context to solve the problem. Further, one should have an excellent
understanding of the scope and applicability of each design pattern before
using it. Analyze the problem carefully, consider all options and apply the
appropriate design pattern to solve the problem. What I personally feel is
that we should only implement a design pattern in our software design provided
we have sufficient knowledge of its applicability and scope. At the same time,
we should be able to analyze the problem context and judge the applicability of
the correct design pattern (if it is required at all) as a solution to the
problem in question. It is quite unnecessary and not wanted of a software
architect to implement a design pattern in a problem domain and increase
complexity when it can be solved without using one.