Intento
- Proporcionar una interfaz unificada a un conjunto de interfaces en un subsistema.Facade define una interfaz de nivel superior que hace que el subsistema sea más fácil de usar.
- Envolver un subsistema complicado con una interfaz más simple.
Problema
Un segmento de la comunidad de clientes necesita una interfaz simplificada para la funcionalidad global de un subsistema complejo.
Discusión
Facade trata de encapsular un subsistema complejo dentro de un objeto de interfaz único. Esto reduce la curva de aprendizaje necesaria para aprovechar con éxito el subsistema. También promueve el desacoplamiento del subsistema de sus potencialmente numerosos clientes. Por otro lado, si la Fachada es el único punto de acceso al subsistema, limitará las características y la flexibilidad que los «usuarios avanzados» puedan necesitar.
El objeto Fachada debe ser un defensor o facilitador bastante simple. No debería convertirse en un oráculo omnisciente o en un objeto «dios».
Estructura
Facade toma un «acertijo envuelto en un enigma envuelto en misterio», e intercala una envoltura que doma la masa amorfa e inescrutable del software.
SubsystemOne
y SubsystemThree
no interactúan con los componentes internos de SubsystemTwo
.Utilizan la SubsystemTwoWrapper
«fachada» (es decir, la abstracción de nivel superior).
Ejemplo
La fachada define una interfaz unificada de nivel superior para un subsistema que facilita su uso. Los consumidores se encuentran con una fachada cuando piden un catálogo. El consumidor llama a un número y habla con un representante de servicio al cliente. El representante del servicio de atención al cliente actúa como una Fachada, proporcionando una interfaz al departamento de realización de pedidos, al departamento de facturación y al departamento de envíos.
Lista de comprobación
- Identificar una interfaz más sencilla y unificada para el subsistema o componente.
- Diseñar una clase ‘wrapper’ que encapsule el subsistema.
- La fachada/wrapper captura la complejidad y las colaboraciones del componente, y delega en los métodos apropiados.
- El cliente utiliza (se acopla a) sólo la fachada.
- Considere si las Fachadas adicionales añadirían valor.
Reglas generales
- La Fachada define una nueva interfaz, mientras que el Adaptador utiliza una interfaz antigua.Recuerde que el Adaptador hace que dos interfaces existentes trabajen juntas en lugar de definir una completamente nueva.
- Mientras que Flyweight muestra cómo hacer muchos objetos pequeños, Facadeshows cómo hacer que un solo objeto represente un subsistema entero.
- Mediator es similar a Facade en el sentido de que abstrae la funcionalidad de las clases existentes. Mediator abstrae/centraliza las comunicaciones arbitrarias entre objetos colegas. Rutinariamente «añade valor», y es conocido/referido por los objetos colegas. Por el contrario, Facade define una interfaz más sencilla para un subsistema, no añade nueva funcionalidad y no es conocida por las clases del subsistema.
- Abstract Factory puede utilizarse como alternativa a Facade para ocultar clases específicas de la plataforma.
- Los objetos Facade son a menudo Singletons porque sólo se requiere un objeto Facade.
- Adapter y Facade son ambos wrappers; pero son diferentes tipos de wrappers. La intención de Facade es producir una interfaz más simple, y la intención de Adapter es diseñar a una interfaz existente.Mientras que Facade rutinariamente envuelve múltiples objetos y Adapter envuelve un solo objeto; Facade podría front-end un solo objeto complejo yAdapter podría envolver varios objetos heredados.
Pregunta: ¿Así que la forma de distinguir entre el patrónAdapter y el patrón Facade es que el Adapter envuelve una clase y el Facade puede representar muchas clases?
Respuesta: ¡No! Recuerde, el patrón Adapter cambia la interfaz de una o más clases en una interfaz que un cliente espera. Aunque la mayoría de los ejemplos de los libros de texto muestran el adaptadoradaptando una clase, es posible que tenga que adaptar muchas clases para proporcionar la interfaz a la que un cliente está codificado. Del mismo modo, una fachada puede proporcionar una interfaz simplificada a una sola clase con una interfaz muy compleja. La diferencia entre las dos no estriba en el número de clases que «envuelven», sino en su intención.
¡Apoya nuestro sitio web gratuito y hazte con el eBook!
- 22 patrones de diseño y 8 principios explicados en profundidad
- 406 páginas bien estructuradas, fáciles de leer y sin jerga
- 228 ilustraciones y diagramas claros y útiles
- Un archivo con ejemplos de código en 4 idiomas
- Todos los dispositivos compatibles: Formatos EPUB/MOBI/PDF
Más información…