- ¿Qué es una base de datos? - noviembre 7, 2020
- ¿Es la programación una profesión para ti? - septiembre 3, 2020
- Temporada 2020-2021 - julio 15, 2020
Introducción
Antes de hablar sobre el patrón, me gustaría hacer un símil con la arquitectura de edificios. Piensa en el Atomium, estructura construida en Bélgica para la Exposición Internacional de 1958. A simple vista es una construcción que representa una molécula de hierro ampliada 165000 veces, pero… ¿Qué tiene de especial el Atomium? Únicamente que la fachada es diferente a lo convencional, le hace reconocible y viendo una foto podemos identificarlo rápidamente, pero internamente, es un museo.
Como puedes ver, las fachadas en arquitectura, te permiten recordar edificios rápidamente, podrás identificarlos de forma mucho más fácil que si tuvieras que identificarlos por lo que tienen en su interior.
En desarrollo de software, la construcción de fachadas te permitirán simplificar los sistemas que construimos, te facilitarán la vida a la hora de programar y te abstraerán de todas las operaciones de todo el subsistema que tiene la fachada.
En el artículo voy a explicarte los conceptos básicos del patrón junto a un ejemplo práctico que he desarrollado para ti, además, al final del artículo podrás descargarte la plantilla del patrón, ¡para que la guardes en tu biblioteca personal!
Descripción y aplicabilidad
El patrón Facade es un patrón de comportamiento, que indica que hay que estructurar el sistema en subsistemas para reducir la complejidad del mismo, y para ello introduce un objeto fachada que proporciona una interfaz única y simplificada de las funcionalidades del subsistema.
Es aplicable en los siguientes escenarios:
- Proporcionar una interfaz sencilla para un subsistema complejo.
- Desacoplar un subsistema de sus clientes o de otros subsistemas convirtiéndolo en más independiente y portable.
- Dividir en capas nuestros subsistemas, donde una fachada definirá un punto de entrada en cada nivel.
Estructura y participantes
El diagrama del patrón Facade es el siguiente:
El patrón tiene los siguientes participantes:
- Fachada: Es la clase que tiene el conocimiento completo de todo el subsistema, la que conoce quienes son los responsables de cualquier tipo de petición. La fachada delega en las peticiones de los clientes en los objetos apropiados del subsistema.
- Clases del subsistema: Implementan las funcionalidades específicas del subsistema y realizan las labores que la fachada les encomienda. Ninguna de las clases del subsistema conoce a la fachada, es decir, ninguna de ellas tiene una referencia a ella.
¿Qué aporta?
El patrón Facade aporta las siguientes ventajas al sistema que lo implementa:
- Los clientes no necesitan conocer las clases que hay detrás de una fachada.
- Proporciona una interfaz más simple para un sistema complejo sin reducir las opciones proporcionadas por el conjunto del sistema.
- Se promueve un acoplamiento débil entre el subsistema y sus clientes, eliminándose o reduciéndose las dependencias.
- No existen obstáculos para que las aplicaciones usen las clases del subsistema que necesiten. De esta forma podemos elegir entre facilidad de uso y generalidad.
A la hora de utilizar fachadas, se tiene que considerar el caso en que varios clientes necesiten acceder a subconjuntos diferentes de la funcionalidad que provee el sistema, podrían acabar usando sólo una pequeña parte de la fachada, por lo que sería conveniente utilizar varias fachadas más específicas en lugar de una única global.
Implementación
¡Ha llegado el momento de que implementes tu primer Facade!
A la hora de implementar el patrón puedes tener estos aspectos en cuenta, ya que te permitirán añadir funcionalidad extra a la fachada:
- Se puede reducir aún más el acoplamiento haciendo que la Fachada sea una clase abstracta, de forma que se pueda escoger entre diferentes implementaciones del subsistema.
- Definición de clases privadas en un subsistema.
Una vez tienes claro qué es una fachada, te voy a poner un ejemplo que he desarrollado para ti, para que puedas afianzar los conceptos explicados en el artículo. El ejemplo consta de un teléfono móvil con funcionalidad de conectar a la WiFi y de obtener la posición GPS en la que te encuentras.
Proyecto
Es un proyecto de aplicación Java.
Clase WiFi
La clase WiFi es el elemento del subsistema que te permitirá interactuar completamente con el adaptador WiFi. Puedes ver que contiene las funcionalidades (simuladas) de encender, apagar, conectar y desconectar.
Clase Posición
La clase Posición almacena toda la información referente a una posición GPS.
Clase GPS
La clase GPS es el elemento del subsistema que te permitirá interactuar con el chip GPS que tiene el móvil. Tiene las operaciones (simuladas) para encender, apagar, fijar posición y obtener posición.
Clase Móvil
La clase Móvil es la fachada de las funcionalidades del subsistema. Provee a los clientes que la utilizan las operaciones para conectarse y desconectarse a una WiFi y obtener la posición GPS. Cada una de las operaciones tiene todas las operaciones necesarias para llevarlas a cabo dentro del subsistema.
Clase Main
La clase Main es el programa principal del ejemplo que he creado. Puedes ver como utilizo la fachada Móvil para llevar a cabo las tres operaciones que ofrece.
Ejecución
Al ejecutar la aplicación obtendrás la siguiente salida.
Resumen y conclusiones
Muchas personas piensan que la complejidad de uso está ligada a la calidad de lo que se usa, pero no es así, o al menos en desarrollo de software. Con el uso de fachadas vas a poder abstraer completamente a los clientes de las funcionalidades que tiene un sistema utilizando fachadas para todas las operaciones que se pueden realizar con él. Además de simplificar el código fuente, te van a permitir poder leerlo y entenderlo de forma más sencilla, y, obviamente, podrás realizar modificaciones de forma más sencilla y centralizada.
Te animo a que pruebes a hacer el ejemplo que he puesto, y si tienes alguna duda ponte en contacto conmigo y te ayudaré con los problemas que encuentres o dudas que tengas.
¡Descárgate la plantilla del patrón!