My initial thoughts of design patterns were related to what a graphic designer would think of in their work. What captures the user’s attention and brings the most value? How can I make my product appealing yet functional? These were one of the many initial thoughts on the topic of design patterns in software engineering. Though these aren’t directly related, on a higher level of the topic, it is. Design patterns relates to the issue of what general problem has a general solution that can be applied. First found by the Gang of Four, we are able to use their patterns to our everyday engineering needs.
My image above is not misleading at all, let me explain. On a higher and abstract level, a design pattern are solutions to repeating problems. In the case above, the repeating problem would be the square block not fitting correctly in the hole, but there is another approach which is to place it in the square hole. There are many solutions that can be applied through the applications of design patterns that do not solely pertain to software engineering.
In the context of software engineering, having a less complex system may provide more to our applications. One of the many design patterns that perfectly exemplifies this characteristic is the singleton pattern. The singleton restricts intstantiation to a single instance of a class. This design pattern is easy and quick to deploy which may save time in deployment of systems and is used often to provide a “global state” in an object-oriented manner. Other notable design patterns includes the observer, facade, model-view-controller, and more.
Long before the introduction of design patterns, there were no explicit implementations of such design patterns as discussed previously. Now looking back at some of our already written code, it seems that some design patterns are actually present in our final ICS 314 project: Warrior Ride Buddies. One of the main features of our app incorporates the observer design pattern. The map functionality is reliant on user data (address, longitude, & latitude) being updated instantly and quickly in order for the app to be realistically usable and accessible to others. This design pattern allows dependencies to change at run-time and allows for an open-ended numbers of dependencies which is a great advantage.