Patrones de diseño: Decorator

Buenas, seguimos con los patrones estructurales, en este caso con Decorator.


¿Para qué sirve?


Pues para añadir funcionalidad a un objeto existente sin modificar su estructura base. Supongamos que tenemos una clase modelo Cuenta y cuando el cliente va al banco a abrir una cuenta, existe una opción de que sea blindada, para no estar modificando la clase Cuenta creamos el decorador que tendrá un diagrama como el siguiente:




Explicación del diagrama anterior:

  • Creamos una interfaz DataSource que será implementada por todas las clases hijas necesarias, en este caso solo FileDataSource, a su vez también será implementada por el decorador base.

  • Ahora crearemos los diferentes decoradores, supongamos que queremos que se pueda encriptar y comprimir de manera opcional, así que creamos estos dos decoradores que serán hijas del decorador base.

  • Por lo que a EncryptionDecorator debemos pasarle por el constructor la instancia de FIleDataSource, de esta forma EncryptionDecorator llamará al constructor padre, que sera el decorador base, que a su vez implementa DataSource, de esta forma ya tenemos un FileDataSource y encriptado.


En el código del cliente sería algo así:

public class Client {
 DataSource fds = new FileDataSource();
 DataSource ed = new EncryptionDecorator(fds);
      ed.metodo1();
}

De esta manera, cuando creamos un FileDataSource, le estamos diciendo que también tenga encriptación.


Resumiendo: agregar funcionalidad extra sin alterar la base de las clases.


Espero que te haya gustado esta pequeña explicación, nos vemos en la próxima :)


92 vistas

©2020 por Juanma Perez.