domingo, 24 de mayo de 2009

FACADE

Nombre

Facade.


Clasificación

Estructural

Intención

Provee una interfaz unificada para un conjun-to de interfaces de un subsistema. Facade define una interfaz de alto nivel que hace, el subsistema fácil de usar.

Motivo


Dividir un sistema en subsistemas, ayuda a reducir la complejidad del mismo, un diseño común disminuye las dependencias y comu-nicaciones entre subsistemas. Una forma de lograr esto es mediante el patrón facade, que provee una única y simple interfaz para el subsistema

Aplicabilidad

Use patrón facade cuando:
• Quiere proveer una interfaz única para un subsistema complejo. Esto ayuda a que un subsistema sea más reusable y fácil de adaptar.
• Hay muchas dependencias entre clientes y clases que implementan una abstrac-ción. Con el patrón facade se desacopla el cliente del subsistema, así como entre subsistemas; esto promueve subsiste-mas independientes y portables.
• Usted quiere dividir en capas su subsis-tema. Use facade para definir el punto de entrada a cada nivel del subsistema.

Estructura

Participantes

• Facade: conoce que clases son respon-sable de una petición. Delega las peti-ciones del cliente a objetos del subsiste-ma apropiados.
• Subsystem classes: implementa la fun-cionalidad del subsistema, maneja el tra-bajo asignado por facade. Desconocen a facade, lo que indica que no tienen referencia a este.

Colaboración

• El cliente se comunica con el subsistema transmitiendo peticiones a facade, que se encarga, luego, de enviarlas a los ob-jetos apropiados. Facade también puede realizar algún trabajo, debido a la traduc-ción de su interface a la interface que el subsistema posee.
• El cliente que utiliza facade no tiene ac-ceso al subsistema directamente.

Consecuencias

Facade ofrece los siguientes beneficios:
• Protege al cliente de los componentes del subsistema, así reduce el número de objetos con los que el cliente se relacio-na. Y hace más fácil de usar al subsiste-ma.
• Promueve un acoplamiento débil entre el cliente y el subsistema. Esto permite mo-dificar componentes en el subsistema sin modificar el cliente.
• No evita que se use clases del subsiste-ma si la aplicación la necesita.

Implementación

Considere las siguientes situaciones cuando use facade:
• Reducir el acoplamiento entre un cliente y el subsistema. El acoplamiento se re-duce incluso más cuando facade no es una interfaz sino una clase abstracta, el cliente se comunica con el subsistema a través de interfaces de la clase abstracta facade.
• Un subsistema puede encapsular clase haciéndolas privadas; el uso de clases privadas restringe el acceso de al cliente al subsistema directamente.

Usos Conocidos

• El sistema compilador de smalltalk utiliza facade para agrupar clase como escá-ner, flujos de datos y analizador de sin-taxis.
• También es utilizado para agrupar fra-meworks.
• En java las clases graphics y Font utili-zan facade.

Patrones relacionados

• Abstract Factory puede utilizar facade, para facilitar el acceso a las familias de objetos.
• Mediator es similar a facade, pues este también abstrae la funcionalidad de cla-ses existentes. Mediator intenta abstraer la comunicación, entre una colección de objetos, así como sus comportamientos adicionales. Facade sólo intenta abstraer la interface de un subsistema para hacerla más fácil de usar.
• La interfaz facade puede ser implemen-tada como un singleton para garantizar un punto de acceso único al subsistema.

Referencias bibliográficas
[1] Erich Gamma et al, Elements of reusable object-oriented software.
[2] Steve Holzner, Design patterns for dummies, Wiley Publishing Inc, Indianapolis, EEUU, 2006, 339.
[3] Jesús García Molina, Análisis y diseño de software - Patrones de diseño, dis.um.es/~jmolina/astema3.