El patrón de fachada (también escrito fachada ) es un patrón de diseño de software que se usa comúnmente 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 estructural o subyacente 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 del contexto para una funcionalidad más genérica (completa con validación de entrada específica del contexto )
- servir como punto de partida para una refactorización más amplia de sistemas monolíticos o estrechamente acoplados en favor de un código más débilmente acoplado
Los desarrolladores a menudo usan 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 simple para el cliente. Por lo general, involucra 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.
Descripción general
El patrón de diseño Facade [1] es uno de los veintitrés patrones de diseño GoF bien conocidos 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 de fachada? [2]
- Para facilitar el uso de un subsistema complejo, debe proporcionarse una interfaz simple para un conjunto de interfaces en el subsistema.
- Deben minimizarse las dependencias de un subsistema.
Los clientes que acceden a un subsistema complejo se refieren directamente a (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 de fachada?
Definir un Facade
objeto 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 reenviar una solicitud.
Esto permite trabajar a través de un Facade
objeto para minimizar las dependencias en un subsistema.
Consulte también el diagrama de secuencia y clase UML a continuación.
Uso
Una fachada se utiliza cuando se desea una interfaz más sencilla o más fácil para un objeto subyacente. [3] Alternativamente, se puede usar un adaptador cuando la envoltura debe respetar una interfaz particular y debe soportar un comportamiento polimórfico . Un decorador permite agregar o modificar el comportamiento de una interfaz en tiempo de ejecución.
Patrón | Intención |
---|---|
Adaptador | Convierte una interfaz en otra para que coincida con lo que espera el cliente. |
Decorador | Agrega responsabilidad dinámicamente a la interfaz al envolver el código original |
Fachada | Proporciona una interfaz simplificada. |
El patrón de fachada se usa típicamente cuando
- se requiere una interfaz simple para acceder a un sistema complejo,
- un sistema es muy complejo o difícil de entender,
- se necesita un punto de entrada para cada nivel de software en capas, o
- las abstracciones y las implementaciones de un subsistema están estrechamente relacionadas.
Estructura
Diagrama de secuencia y clase UML
En este diagrama de clases UML , la Client
clase no accede directamente a las clases del subsistema. En cambio, las Client
obras a través de una Facade
clase que implementa una interfaz simple en términos de (a) mediante la delegación de las clases de subsistemas ( Class1
, Class2
y Class3
). El Client
depende sólo de la sencilla Facade
interfaz y es independiente del complejo subsistema. [4]
El diagrama de secuencia muestra las interacciones en tiempo de ejecución: Las Client
obras objeto a través de un Facade
objeto que delega la solicitud a la Class1
, Class2
y Class3
casos que realizan la petición.
Diagrama de clases UML
- Fachada
- La clase de fachada abstrae los Paquetes 1, 2 y 3 del resto de la aplicación.
- Clientela
- 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 ("usted") interactúa con una fachada (la "computadora") de un sistema complejo (partes internas de la computadora, como CPU y HardDrive).
C ++
struct CPU { void Freeze (); void Jump ( posición larga ); void Execute (); }; struct HardDrive { char * Read ( long lba , int size ); };struct Memory { void Load ( posición larga , char * datos ); }; class ComputerFacade { public : void Start () { cpu_ . Congelar (); memoria_ . Load ( kBootAddress , hard_drive_ . Read ( kBootSector , kSectorSize )); cpu_ . Jump ( kBootAddress ); cpu_ . Ejecutar (); } privado : CPU cpu_ ; Memory memory_ ; HardDrive hard_drive_ ; };int main () { computadora ComputerFacade ; computadora . Inicio (); }
Ver también
Referencias
- ^ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Patrones de diseño: elementos de software orientado a objetos reutilizable . Addison Wesley. págs. 185ff . ISBN 0-201-63361-2.CS1 maint: varios nombres: lista de autores ( enlace )
- ^ "El patrón de diseño de la fachada: problema, solución y aplicabilidad" . w3sDesign.com . Consultado el 12 de agosto de 2017 .
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns (rústica) . 1 . O'Reilly. págs. 243, 252, 258, 260. ISBN 978-0-596-00712-6. Consultado el 2 de julio de 2012 .
- ^ "El patrón de diseño de la fachada - Estructura y colaboración" . w3sDesign.com . Consultado el 12 de agosto de 2017 .