Los patrones de diseño de software se refieren a las mejores prácticas adoptadas por desarrolladores con mucha experiencia en el paradigma orientado a objetos y se hacen para que los demás podamos seguir su ejemplo para resolver problemas que se tengan en el proceso. Un patrón de diseño es una solución a los problemas más comunes en el diseño de software, no se refiere a código que se pueda implementar directamente, si no que es una descripción o una plantilla de cómo resolver un problema en diferentes situaciones, por lo que no van a ser tan precisos.
Por ser tan diverso el diseño de software, se han publicado muchos patrones de diseño, para poder adaptarse a las necesidades de los desarrolladores, por lo cual los patrones de diseño se dividen en 3 grandes categorías, estas no están en orden de importancia, aunque algunos autores si las clasifican por las más usadas, yo creo que todas son importantes ya que unas se adaptan bien para algunos casos mientras que otras para otros casos, haciendo que estas sean completamente necesarias.
- Patrón de Diseño Creacional

Este patrón de diseño se implementa cuando se quiere tener control de los objetos que crean y cómo se crean, para poder reducir la complejidad e inestabilidad del proyecto. El operador “new” se considera peligroso ya que crea objetos por todo el proyecto, lo cual puede llevar a que diferentes clases sean dependientes, lo que dificultaría algún cambio futuro ya que se tendrían que cambiar las clases dependientes a la que se quiere cambiar o terminaría en errores cascada. Este patrón evita esto al controlar la creación de objetos desde el proceso de inicialización y no dejarlo en manos del cliente. Hay varias formas de implementar el patrón:
- Singleton
- Método fábrica
- Fábrica abstracta
- Constructor
- Patrón de Diseño Estructural

Este patrón se centra en la composición de clases y objetos que se pueden adaptar para poder hacer estructuras más grandes juntando varios. Se trata de poder hacer las partes más pequeñas de los sistemas y que con varias partes se pueda crear el sistema completo para así poder tener una separación bien definida y que sea más fácil poder dar mantenimiento a cada parte en vez de a todo el sistema a la vez. Se puede lograr este patrón por medio de las siguientes técnicas:
- Adaptador
- Puente
- Composición
- Decorador
- Fachada
- Proxy
- Patrón de Diseño basado en Comportamiento

Este patrón se basa completamente en la comunicación entre los objetos, ya que se centra en cómo se dividen las responsabilidades entre objetos y cómo se resuelven los problemas, una forma de esto es que cada objeto tenga su propia responsabilidad y no se repita entre objetos, para así poder tener un control y una manera sencilla de agregar un paso entre dos objetos. Esta es solo una técnica de hacer más flexible un programa, pero hay más de este patrón:
- Cadena de responsabilidades
- Comando
- Interpretador
- Iterador
- Mediador
- Objeto Nulo
- Observador
- Visitante
- Plantilla
Gracias a estas herramientas se pueden aprender buenas prácticas para desarrollar proyectos en el paradigma más usado actualmente, orientado a objetos, con estas prácticas se logra que los proyectos puedan crecer y evolucionar de manera que no se tenga que crear un proyecto completamente nuevo cuando hay necesidad de más cosas, si no que se puede usar de base el que ya se tiene y agregarle más funcionalidades, pero de una manera que cualquier programador pueda hacerlo y no solo la persona que lo creó en un principio. Se debe hace uso de estos patrones para evitar casos como el del cómic de abajo.

Si se quiere aprender más de este tema este curso está disponible, o simplemente en línea se encuentran muchos cursos, o páginas con muchos ejemplos como esta que en verdad explica de una manera muy detallada.














