If you’ve ever had the experience of developing a website using pure html you will know that it can get messy and be extremely tedious. But UI-Frameworks allow software engineers to produce high quality applications quickly that are very readable and efficient. From a more abstract point of view, Design Patterns allow software engineers to tackle problems that can occur often in several situations, using tried and tested development paradigms.
As previously mentioned in my essay on Coding Standards, organization and structure of code is incredibly important especially when working on projects that you plan on revisiting in the future, or are in general large in scale (several files, thousands of lines). In a similar fashion, design patterns allow us to implement organization and structure to our projects. This is done through the utilization of templates that show relationships and interactions between classes or objects. This can drastically reduce time in building applications as you can divide up your work in a way that makes it easy to read, and easy to understand. For example, in a project I’m currently working on that involves utilization of a database to connect to several locations, utilization of creational design patterns allows us to control load balance, and unnecessary connections through the use of instance connections.
Criticisms of design patterns are reminiscent of those on UI Frameworks as they both seem to target the fact that they limit creativity as they usually involve some degree of copying. But if there is no copying and only referencing, they cannot be called “patterns” as their applications will all be different. Another point of criticism is that poor design patterns can lead to inefficient solutions. This is due to the fact that poorly developed design patterns can often contain unnecessary duplication of code which then leads to bad efficiency and practice.
With all that has been said about design patterns, I think the benefits far outweigh the negatives especially if you understand how to properly implement them, and are able to recognize when you are using a poorly developed design patterns. Design patterns can also help Software Engineers get past mental blocks in planning or structuring which is imperative when in a pinch.