You are on page 1of 3

Ejemplo de Aplicacin Patrn Faade Supongamos que el sistema de Venta Digital est estructurado en capas lgicas; donde la capa

de Dominio se subdivida en varios subsistemas tales como: Ventas, Envos, etc. El subsistema de Ventas puede hacer uso de los servicios proporcionados por el subsistema de Envos. Un buen diseo definira una interfaz de servicio nica que disminuya el acoplamiento y facilite la realizacin de cambios en la implementacin de las clases que proporcionan dicho servicio.

Ventas Envios

FachadaEnvio mostrarDestinos() mostrarFormasEnvio() distribuyeALocalidad() existeDestino() conocerMedTranspSegunForma() mostrarEmpresasTransporte()

0..*

FormaEnvio

0..*

0..*
1...

0...

Destino

0..*
0...

MedioTransporte

EmpresaTransporte 1 1 1

Localidad

0... 0...

PuntoDistribucion

Provincia

Pais

Participantes 1. Fachada [FachadaEnvio]: Conoce las clases del subsistema a las que le pide colaboracin, en alguna peticin. Se ocupa de delegar las solicitudes de los clientes en los objetos apropiados. 2. Clases del Subsistema: implementan la funcionalidad del subsistema y realizan las tareas solicitadas por la fachada.

Procedimiento: 1. Definir los servicios que sern brindados por la Fachada. 2. Crear una clase de fabricacin pura de acceso pblico que proporcione a los clientes los servicios definidos (FachadaEnvio). 3. Implementar los mtodos que realizan la peticin a las clases del subsistema. 4. Establecer las relaciones requeridas con los objetos propios del subsistema. Funcionamiento

: GestorRegistrarPedido

: FachadaEnvio

: FormaEnvio

: Destino

: Localidad

mostrarDestinos( )

getNombre( )

getNombre( )

mostrarFormasEnvio( )

getNombre( )

(*) Las entidades marcadas con verdes representan a mltiples instancias de dicha entidad.

Implementacin A continuacin veremos una forma simplificada de implementar el patrn Fachada para el ejemplo planteado. crear clase pblica FachadaEnvio { ... crear mtodo pblico existeDestino(String nombreDestino) {
//iterar sobre la mltiple instancia Destino hasta encontrar el destino deseado

para cada objeto destino

{ preguntar si destino.getNombre() = nombreDestino entonces retornar verdadero } retornar falso } ... }

Ventajas Disminuye el acoplamiento entre un subsistema y sus clientes. Ocultar a los clientes los componentes de un subsistema.

You might also like