Patrones de diseño en Java

Patrones de diseño en Java


Los patrones de diseño en Java nos van a ofrecer soluciones o a proporcionar soluciones a problemas concretos ya conocidos.

Conociendo el mayor número de patrones de diseño posible, nos ayudará a encontrar la mejor solución a un problema cuando nos encontremos codificando.

Lo que sí hay que tener en cuenta es que un patrón de diseño nos va a representar una idea, no una implementación concreta.

El uso y la implementación de patrones de diseño, nos ayudará a tener un código más reutilizable, mantenible (muy importante en proyectos de gran envergadura) y flexible.

Clasificación de los patrones de diseño

Podríamos decir que los patrones se clasifican en 3 grandes grupos:

  • Patrones creacionales o Creational Pattern.
  • Patrones estructurales o Structural Pattern.
  • Behavioral Pattern o Patrones de comportamiento.

Patrones creacionales

Dentro de los patrones de diseño en Java, encontramos los patrones creacionales los cuales se refieren a la forma de crear los objetos. Este patrón de diseño se utiliza cuando se tiene que tomar una decisión en el momento en el que vamos a instanciar una clase.

La idea del patrón creacional es gestionar e indicar la forma en la que crear estos objetos.

Dentro de los patrones creacionales encontramos los siguientes:

  • Patrón Abstract Factory: El patrón Abstract Factory define una única interfaz (también puede ser una clase abstracta) para crear relaciones de objetos (hijos-padres) pero sin llegar a especificar la clase hija.
  • Patrón Factory Method: Define una interfaz o clase abstracta para crear un objeto, pero se deja a las clases hija que decidan la clase a instanciar.
  • El Patrón Singleton: El Patrón Singleton se basa en la creación de una instancia única.
  • Patrón Prototype: El patrón Prototype consiste en la clonación de un objeto ya existente en lugar de en la creación de uno nuevo.
  • Patrón Builder: El patrón builder va paso a paso en la creación en la creación de objetos complejos, es decir, partimos de un objeto sencillo y vamos añadiendo más campos para crear un objeto más complejo. El cual será flexible y extensible a lo largo del tiempo.
  • Patrón Object Pool: El patrón Object Pool hace hincapié en la utilización de los objetos a lo largo de su vida siempre que sea posible debido al alto coste de la creación de nuevos.

Patrones estructurales o Structural Pattern

El patrón estructural se basa en como los objetos y clases se componen y relacionan para crear estructuras complejas.

El patrón estructura se centra en las relaciones entre las diferentes clases y como van a interactuar.

Dentro de los patrones estructurales se pueden clasificar un total de siete patrones:

  • Patrón Adapter: Permite la colaboración entre objetos, siempre y cuando sus interfaces sean compatibles.
  • El Patrón Composite: la idea de este patrón es crear un clase componedora a partir de la creación entre las clases de una estructura de árbol.
  • Patrón Bridge: la idea del patrón Bridge es dividir una clase grande en dos clases independientes entre si, con un punto de comunicación.
  • Patron decorator: este patrón permite añadir nuevas funcionalidaa una clase dentro de otro objetos encapsulados.
  • Patrón facade: el patrón facade o fachada nos proporciona una interfaz de interacción con funcionalidades, clases o librerías.
  • Patrón proxy: es un patrón de diseño estructural que nos va a proporcionar un sustituto para otro objeto de nuestra aplicación. Un proxy controla el acceso al objeto original, para poder operar con el objeto antes de que cualquier petición llegue al objeto.
  • Patrón Flyweight: La idea del patrón Flyweight es reutilizar objetos ya existentes con funcionalidades o comportamiento similar y almacenarlo.

Patrones de comportamiento o Behavioral Pattern.

Los patrones de comportamiento son aquellos que tratan con algoritmos y/o asignación de responsabilidades entre los diferentes objetos.

Entre los patrones de comportamiento o Behsvioral Pattern nos encontramos:

  • Patrón Chain of Responsability: Este patrón de diseño permite un gran desacople. Una petición es enviada a una cadena de objetos en la que será gestionada por cualquier objeto.
  • Patrón Command: El patrón Command encapsula en un objeto toda la información necesaria para realizar una acción o enviar un evento en un momento posterior.
  • El Patrón iterator: Este patrón de diseño nos permite recorrer una colección de elementos/objetos sin exponer su representación.
  • Patrón Mediator: Este patrón que nos permite reducir las dependencias entre objetos, nos va a ayudar a reducir las comunicaciones e interacciones complejas entre objetos.
  • Patron memento: Siempre que necesito restaurar a un estado anterior un objeto haremos uso del Patrón Memento.
  • El Patrón Observer: El patrón Observer define una dependencia una a una y cuando el objeto cambia su estado es notificado a todos los dependientes y actualizado automáticamente.
  • Patrón Strategy: El patrón Strategy se encarga de realizar el intercambio de mensajes entre diferentes objetos para realizar un comportamiento específico.
  • El Patrón State: El patrón State hace que el objeto cambie en función del estado en el que se encuentre.
  • Patrón Visitor: El patrón Visitor representa una operación sobre los elementos de una estructura de un objeto, es decir, permite definir una nueva operación sin cambiar las clases de los elementos sobre los que se esta operando.
  • Patrón Template Method: Este patrón básicamente define un esqueleto o estructura, añadiendo más pasos o lógica en los hijos.

Conclusión

Los diferentes patrones de diseño en java nos va a facilitar y a ayudar a encontrar ina solución de codificación a un problema conocido. Pudiendo aplicar algoritmos y desarrollos que sean mas extensibles y mantenibles a lo largo del tiempo.

Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *