Su aplicación se puede realizar en los siguientes casos
- Tener una interfaz simple para un subsistema complejo
- Estructurar varios subsistemas en capas, ya que las fachadas serían el punto de entrada a cada nivel.
- Desacoplar un sistema de sus clientes y de otros subsistemas, reduciendo dependencias entre los subsistemas y los clientes.
Fachada (Facade): utiliza a los módulos para llevar a cabo las diversas operaciones que el cliente solicita, de manera que el cliente desconoce la complejidad de todo el programa y solo se centra en este.
Subclases (Los módulos): son los que implementan las diferentes funcionalidades del programa. La fachada es quién los invoca. Lo más importante es que no dependen de la fachada, la creación o desaparición de esta no debe afectarlos en absoluto.
Ejemplo con Java
Supongamos que creamos un programa que permite registrar y mostrar licencias de conducir pidiendo el DNI, tipo y categoría. Además, la mayor cantidad de registros son de licencias A1. Entonces podemos emplear el patrón Facade de la siguiente formaTenemos una clase llamada "Licencias" que almacena los valores mencionados y un método para visualizar el registro.
package entidades;
public class Licencias {
private String dni;
private String categoria;
private String tipo;
public Licencias() {
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getCategoria() {
return categoria;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public String verDetalle() {
return String.format("DNI: %s\nLicencia: %s%s",
dni,categoria,tipo);
}
}
Creamos la fachada para el caso más usual que serían las licencias A1
package facade;
import entidades.Licencias;
public class CatA1Facade {
private Licencias licenciaA1;
public CatA1Facade(String dni) {
licenciaA1 = new Licencias();
licenciaA1.setDni(dni);
licenciaA1.setCategoria("A");
licenciaA1.setTipo("I");
}
public String verDetalle() {
return licenciaA1.verDetalle();
}
}
Creamos la un registro A1 sin aplicar Facade y luego uno aplicándolo.
package test;
import entidades.Licencias;
import facade.CatA1Facade;
public class Ejecutor {
public static void main(String[] args) {
// Sin Facade
Licencias licenciaA1 = new Licencias();
licenciaA1.setDni("70686223");
licenciaA1.setCategoria("A");
licenciaA1.setTipo("I");
System.out.println(licenciaA1.verDetalle());
// Con Facade
CatA1Facade a1Facade = new CatA1Facade("78465521");
System.out.println(a1Facade.verDetalle());
}
}
Estructura del proyecto:
Se puede apreciar que existe una simplicidad en la generación de estos al evitar repetir código.
No hay comentarios:
Publicar un comentario