Facade

Facade
Información sobre la plantilla
Facade.jpg
Concepto:Proporcione una interfaz unificada a un juego de interfaz en un subsistema.

Facade: Este patrón proporciona una interfaz unificada a un juego de interfaz en un subsistema. La fachada define una interfaz superior-nivelada que hace el subsistema más fácil para usar.

Tipo

Estructura, a nivel de objetos.

Propósito

Proporcionar una interfaz unificada de alto nivel que, representando a todo un subsistema, facilite su uso. La "fachada" satisface a la mayoría de los clientes, sin ocultar las funciones de menor nivel a aquellos que necesiten acceder a ellas.

Participantes

  • La fachada (el Recopilador).

Sabe qué clases del subsistema son responsables para una demanda. El cliente de los delegados pide a los objetos del subsistema apropiados.

Implementa la funcionalidad del subsistema. trabajo del asa asignado por el objeto de la Fachada. No tiene ningún conocimiento de la fachada; es decir, ellos no guardan ninguna referencia a ella.

Cuando usarlo

  • Cuando se pretende proporcionar una interfaz simple para un subsistema complejo.
  • Cuando existen muchas dependencias entre los clientes y las clases que implementan una abstracción. Una "fachada" proporciona al subsistema independencia y portabilidad.
  • Cuando se pretende estructurar en capas el subsistema (cada capa tendrá su propia "fachada").

Ventajas

  • Al separar al cliente de los componentes del subsistema, se reduce el número de objetos con los que el cliente trata, facilitando así el uso del subsistema.
  • 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.

Relacionado con

  • Fábrica Abstracta puede usarse conjuntamente con Fachada para proporcionar una interfaz que permita crear objetos del subsistema de manera independiente a éste. Además, puede ser una alternativa para ocultar las clases específicas de una plataforma.
  • Mediador es similar a Fachada pues también abstrae la funcionalidad de clases ya existentes, pero está orientado a la comunicación entre objetos "colegas" y además suele centralizar aquellas responsabilidades que no competen a ninguno de ellos. Por su parte, como hemos visto, Fachada abstrae la interfaz de un subsistema para facilitar su uso, sin añadir funcionalidades y resultando transparente a éste.
  • Lo más frecuente es que sólo haya un objeto Fachada de cada tipo. De ahí su relación con Solitario.

Otros aspectos de interés

  • La "Fachada" sabe qué clase es responsable de cada petición, pero es completamente transparente para ellas. Por tanto, aunque las funciones las desempeñan las otras clases, es a la "Fachada" a quien le toca el trabajo de "traducir".
  • Una manera de reducir el acoplamiento es hacer abstracta la "Fachada" y luego especializar mediante herencia. Otra posibilidad es configurar la "Fachada" con objetos del subsistema, que pueden cambiarse. Esta posibilidad puede entrar en conflicto con el objetivo de la "Fachada", la facilidad de uso.
  • Un subsistema es análogo a una clase, en el sentido de que tiene una interfaz PÚBLICA (de la que forma parte la "Fachada") y otra PRIVADA (que no está muy claro como conseguirla ni para que sirve).

Ejemplo de aplicación

En un entorno de programación se permite a las aplicaciones el acceso al subsistema de compilación. Este subsistema contiene clases como el Analizador Léxico, el Analizador Sintáctico, el Analizador Semántico, el Generador De Código Intermedio o el Generador De Código Final. No obstante sólo aplicaciones muy especiales necesitan acceder directamente a algunas de estas clases, mientras que para el resto se puede definir una interfaz general, una "fachada", que les permita sencillamente compilar sus programas.

Fuentes

  • Patrones del "Gang of Four". Unidad Docente de Ingeniería del Software Facultad de informática - Universidad Politécnica de Madrid
  • DesingPatterns.chm.
  • André Weinand, Erich Gamma, and Rudolf Marty. ET++ — An object-oriented application framework in C++. In Object-Oriented Programming Systems, Languages, and Applications Conference Proceedings, pages 46–57, San Diego, CA, September 1988. ACM Press.
  • Bjarne Stroustrup. The Design and Evolution of C++. Addison-Wesley, Reading, MA, 1994.