El patrón de fachada (o patrón de fachada) es un patrón de diseño de software comúnmente utilizado con la programación orientada a objetos. El nombre es por analogía con una fachada arquitectónica.

Una fachada es un objeto que proporciona una interfaz simplificada a un cuerpo de código más grande, como una biblioteca de clases. Una fachada puede:

  • hacer que una biblioteca de software sea más fácil de usar, entender y probar, ya que la fachada tiene métodos convenientes para las tareas comunes;
  • hacer que la biblioteca sea más legible, por la misma razón;
  • reducir las dependencias del código externo en el funcionamiento interno de una biblioteca, ya que la mayor parte del código utiliza la fachada, permitiendo así una mayor flexibilidad en el desarrollo del sistema;
  • envolver una colección mal diseñada de APIs con una única API bien diseñada.

El patrón de diseño Facade se utiliza a menudo cuando un sistema es muy complejo o difícil de entender porque el sistema tiene un gran número de clases interdependientes o su código fuente no está disponible. Este patrón oculta las complejidades del sistema más grande y proporciona una interfaz más simple para el cliente. Normalmente se trata de una única clase envolvente que contiene un conjunto de miembros requeridos por el cliente. Estos miembros acceden al sistema en nombre del cliente de la fachada y ocultan los detalles de la implementación.

Uso

Una fachada se utiliza cuando se desea una interfaz más fácil o más simple a un objeto subyacente. Alternativamente, se puede utilizar un adaptador cuando la envoltura debe respetar una interfaz particular y debe soportar un comportamiento polimórfico. Un decorador permite añadir o alterar el comportamiento de una interfaz en tiempo de ejecución.

Patrón Intento
Adaptador Convierte una interfaz en otra para que coincida con lo que espera el cliente
Decorador Añade dinámicamente responsabilidad a la interfaz envolviendo el código original
Fachada Proporciona una interfaz simplificada

El patrón de fachada se suele utilizar cuando:

  • se requiere una interfaz sencilla para acceder a un sistema complejo;
  • las abstracciones e implementaciones de un subsistema están estrechamente acopladas;
  • se necesita un punto de entrada a cada nivel de software en capas; o
  • un sistema es muy complejo o difícil de entender.

Estructura

Fachada: La clase fachada abstrae los paquetes 1, 2 y 3 del resto de la aplicación.Clientes: Los objetos utilizan el Patrón de Fachada para acceder a los recursos de los Paquetes.

Ejemplo

Este es un ejemplo abstracto de cómo un cliente («tú») interactúa con una fachada (el «ordenador») a un sistema complejo (partes internas del ordenador, como la CPU y el Disco Duro).

/* Complex parts */class CPU { freeze() { /* code here */ } jump(position) { /* code here */ } execute() { /* code here */ }}class Memory { load(position, data) { /* code here */ }}class HardDrive { read(lba, size) { /* code here */ }}/* Facade */class ComputerFacade { constructor() { this.processor = new CPU(); this.ram = new Memory(); this.hd = new HardDrive(); } start() { this.processor.freeze(); this.ram.load(this.BOOT_ADDRESS, this.hd.read(this.BOOT_SECTOR, this.SECTOR_SIZE)); this.processor.jump(this.BOOT_ADDRESS); this.processor.execute(); }}/* Client */let computer = new ComputerFacade();computer.start();

Deja una respuesta

Tu dirección de correo electrónico no será publicada.