Patrón de fachada
El patrón de fachada (también escrito fachada) es un patrón de diseño de software comúnmente utilizado en la programación orientada a objetos. De manera análoga a una fachada en arquitectura, una fachada es un objeto que sirve como una interfaz frontal que enmascara un código subyacente o estructural más complejo. Una fachada puede:
- mejorar la legibilidad y usabilidad de una biblioteca de software enmascarando la interacción con componentes más complejos detrás de una API única (y a menudo simplificada)
- proporcionar una interfaz específica de contexto a una funcionalidad más genérica (completa con validación de entrada específica de contexto)
- servir como punto de lanzamiento para un refactor más amplio de sistemas monolíticos o ajustados a favor de un código más flexible
Los desarrolladores suelen utilizar el patrón de diseño de fachada cuando un sistema es muy complejo o difícil de entender porque el sistema tiene muchas clases interdependientes o porque su código fuente no está disponible. Este patrón oculta las complejidades del sistema más grande y proporciona una interfaz más sencilla para el cliente. Por lo general, implica una sola clase contenedora que contiene un conjunto de miembros requeridos por el cliente. Estos miembros acceden al sistema en nombre del cliente de fachada y ocultan los detalles de implementación.
Resumen
La fachada patrón de diseño es uno de los veintitrés bien conocidos Patrones de diseño de GoF que describen cómo resolver problemas de diseño recurrentes para diseñar software orientado a objetos flexible y reutilizable, es decir, objetos que son más fáciles de implementar, cambiar, probar y reutilizar.
¿Qué problemas puede resolver el patrón de diseño Facade?
- Para facilitar el uso de un subsistema complejo, se debe proporcionar una interfaz sencilla para un conjunto de interfaces en el subsistema.
- Debería minimizarse la dependencia de un subsistema.
Los clientes que acceden a un subsistema complejo se refieren directamente (dependen de) muchos objetos diferentes que tienen diferentes interfaces (acoplamiento estrecho), lo que hace que los clientes sean difíciles de implementar, cambiar, probar y reutilizar.
¿Qué solución describe el patrón de diseño Fachada?
Defina un objeto Fachada
que
- implementa una interfaz simple en términos de (delegando a) las interfaces en el subsistema y
- puede realizar funciones adicionales antes/después de enviar una solicitud.
Esto permite trabajar a través de un objeto Facade
para minimizar las dependencias en un subsistema.
Vea también la clase UML y el diagrama de secuencia a continuación.
Uso
Una Fachada se usa cuando se desea una interfaz más fácil o simple para un objeto subyacente. Alternativamente, se puede usar un adaptador cuando el contenedor debe respetar una interfaz particular y debe admitir un comportamiento polimórfico. Un decorador hace posible agregar o modificar el comportamiento de una interfaz en tiempo de ejecución.
Patrón | Intent |
---|---|
Adaptador | Convierte una interfaz a otra para que coincida con lo que el cliente espera |
Decorador | Agrega dinámicamente la responsabilidad a la interfaz envolviendo el código original |
Facade | Proporciona una interfaz simplificada |
El patrón de fachada se usa típicamente cuando
- una interfaz simple es necesaria para acceder a un sistema complejo,
- un sistema es muy complejo o difícil de entender,
- un punto de entrada es necesario para cada nivel de software de capa, o
- las abstracciones e implementaciones de un subsistema se acoplan estrechamente.
Estructura
Clase UML y diagrama de secuencia
En este diagrama de clases UML,
la clase Client
no accede directamente a las clases del subsistema.
En cambio, Client
funciona a través de una clase Facade
que implementa una interfaz simple en términos de (delegando en) las clases del subsistema (Class1
, Clase2 y Clase3).
El Cliente
depende únicamente de la sencilla interfaz Facade
y es independiente del subsistema complejo.
El diagrama de secuencia
muestra las interacciones en tiempo de ejecución: El objeto Client
funciona a través de un objeto Facade
que delega la solicitud a
Class1
, Class2
y Class3
instancias que realizan la solicitud.
Diagrama de clases UML
- Facade
- La clase de fachada abstracts Paquetes 1, 2, y 3 del resto de la aplicación.
- Clientes
- Los objetos están utilizando el Patrón Facade para acceder a los recursos de los Paquetes.
Ejemplo
Este es un ejemplo abstracto de cómo un cliente ("usted") interactúa con una fachada (la "computadora") de un sistema complejo (partes internas de la computadora, como CPU y disco duro).
C++
struct CPU {} vacío Quieto(); vacío Salto()largo posición); vacío Ejecutar();};struct HardDrive {} char* Leer()largo lba, int tamaño);};struct Memoria {} vacío Carga()largo posición, char* datos);};clase ComputerFacade {} público: vacío Comienzo() {} cpu_.Quieto(); memoria_.Carga()kBootAddress, hard_drive_.Leer()kBootSector, kSectorSize)); cpu_.Salto()kBootAddress); cpu_.Ejecutar(); } privado: CPU cpu_; Memoria memoria_; HardDrive hard_drive_;};int principal() {} ComputerFacade ordenador; ordenador.Comienzo();}
Contenido relacionado
AmigaDOS
Transporte en Pakistán
Vigilancia predictiva