Los patrones de diseño proveen una solución para problemas comunes que nos encontramos a la hora de estar programando, normalmente son utilizados para mostrar relaciones entre clases u objetos, la idea es facilitar y hacer más sencillo la creación de software. Es importante mencionar que los patrones de diseño no son implementaciones si no, ideas.
Vamos a identificar 3 tipos de patrones de diseño importantes: estructurales, creacionales y de comportamiento.
Diseño estructural
Ayudan a crear relaciones entre entidades. Aquí hay algunos de las herramientas que proporciona este patrón de diseño.

fuente: https://sourcemaking.com/design_patterns/structural_patterns
Como podemos ver nos da una forma en la que podemos implementar nuestras clases pero en sí no es una implementación específica.
Diseño creacional
Este tipo de diseño consiste en tener una forma de crear objetos en tu software, por ejemplo existe el singleton que tiene la restricción de crear una sola instancia de una clase o un prototipo que es una instancia creada con anterioridad para que se pueda copiar en cualquier momento.
Diseño de comportamiento
Bien ya vimos el diseño estructural que se encargan de definir las clases, el creacional que se encarga de las instancias, solo nos falta el de comporamiento que se encarga de los métodos básicamente. Aquí hay algunos ejemplos:

fuente: https://sourcemaking.com/design_patterns/behavioral_patterns
Conclusión
Bien después de haber conocido estos diferentes tipos de patrones de diseño, me parece bastante interesante tener una estructura definida de esta forma por que normalmente no nos ponemos a pensar todas las formas en las que podríamos ahorrarnos muchas lineas de código con alguna referencia a algún objeto externo o teniendo un memento de un objeto para no tener que repetir un proceso para volver a un estado, es muy importante conocer estos patrones porque sirven mucho para ayudarnos a trabajar de forma más inteligente.
Pueden ver mi trabajo en grupoargon.co