Este patrón nos permite acceder a un subsistema de forma más sencilla.
Para entenderlo mejor veamos un ejemplo sencillo en el que NO utilizaremos este patrón. Se trata de simular el proceso a realizar para arrancar un coche.
Main.java:
package estructurales.facade.facade01;
public class Main
{
public static void main(String[] args)
{
ComprobarLiquidos liquidos = new ComprobarLiquidos();
liquidos.comprobar();
ComprobarAsiento asiento = new ComprobarAsiento();
asiento.comprobar();
ComprobarEspejos espejos = new ComprobarEspejos();
espejos.comprobar();
Arrancar arrancar = new Arrancar();
arrancar.encenderContacto();
System.out.println("\nProceso finalizado.");
}
}
ComprobarLiquidos.java:
package estructurales.facade.facade01;
public class ComprobarLiquidos
{
public ComprobarLiquidos() {
}
// ------------------
public void comprobar() {
System.out.println("Comprobamos los líquidos de freno, agua, etc...");
}
}
ComprobarAsiento.java:
package estructurales.facade.facade01;
public class ComprobarAsiento
{
public ComprobarAsiento() {
}
// ------------------
public void comprobar() {
System.out.println("Comprobamos y regulamos el asiento...");
}
}
ComprobarEspejos.java:
package estructurales.facade.facade01;
public class ComprobarEspejos
{
public ComprobarEspejos() {
}
// ------------------
public void comprobar() {
System.out.println("Comprobamos y regulamos los espejos retrovisores...");
}
}
Arrancar.java:
package estructurales.facade.facade01;
public class Arrancar
{
public Arrancar() {
}
// ------------------
public void encenderContacto() {
System.out.println("Introducimos la llave y le damos al encendido...");
}
}
EXPLICACIÓN: como puedes observar, en este caso el programa principal (Main) es el encargado de acceder a cada uno de los objetos del subsistema creado con el objetivo de realizar el proceso de arrancar el coche.
Veamos ahora cómo quedaría utilizando el patrón de diseño Facade. Para ello modificamos la clase Main y creamos otra que hará de fachada:
Main.java:
package estructurales.facade.facade02;
public class Main
{
public static void main(String[] args)
{
Facade fachada = new Facade();
fachada.arrancarCoche();
System.out.println("\nProceso finalizado.");
}
}
Facade.java (Fachada según el diagrama anterior):
package estructurales.facade.facade02;
public class Facade
{
private ComprobarLiquidos liquidos;
private ComprobarAsiento asiento;
private ComprobarEspejos espejos;
private Arrancar arrancar;
// --------------------------------
public Facade()
{
this.liquidos = new ComprobarLiquidos();
this.asiento = new ComprobarAsiento();
this.espejos = new ComprobarEspejos();
this.arrancar = new Arrancar();
}
// --------------------------------
public void arrancarCoche()
{
liquidos.comprobar();
asiento.comprobar();
espejos.comprobar();
arrancar.encenderContacto();
}
}
EXPLICACIÓN:
- Al crear la clase Facade hemos facilitado la realización del proceso al programa principal, liberándole de tener que acceder directamente a cada elemento del subsistema.