Patrón de diseño de fachada | Introducción

La fachada es parte del patrón de diseño Gang of Four y se clasifica en patrones de diseño estructural. Antes de profundizar en los detalles, analicemos algunos ejemplos que serán resueltos por este Patrón en particular.

Entonces, como sugiere el nombre, significa la cara del edificio. La gente que pasa por la calle solo puede ver esta cara de cristal del edificio. No saben nada al respecto, el cableado, las tuberías y otras complejidades. Oculta todas las complejidades del edificio y muestra una cara amable.

Más ejemplos

En Java, la interfaz JDBC puede denominarse fachada porque nosotros, como usuarios o clientes, creamos una conexión utilizando la interfaz «java.sql.Connection», cuya implementación no nos preocupa. La implementación se deja al proveedor del controlador.

Otro buen ejemplo puede ser el arranque de una computadora. Cuando una computadora se inicia, implica el trabajo de la CPU, la memoria, el disco duro, etc. Para que sea fácil de usar para los usuarios, podemos agregar una fachada que envuelva la complejidad de la tarea y, en su lugar, proporcione una interfaz simple.
Lo mismo ocurre con el patrón de diseño de fachada . Oculta las complejidades del sistema y proporciona una interfaz para el cliente desde donde el cliente puede acceder al sistema.

Diagrama de patrón de diseño de fachada

Ahora intentemos entender mejor el patrón de la fachada usando un ejemplo simple. Consideremos un hotel. Este hotel tiene un encargado del hotel. Hay muchos restaurantes dentro del hotel, por ejemplo, restaurantes vegetarianos, restaurantes no vegetarianos y restaurantes vegetarianos/no ambos.
Usted, como cliente, desea acceder a diferentes menús de diferentes restaurantes. No sabes cuáles son los diferentes menús que tienen. Solo tiene acceso al encargado del hotel que conoce bien su hotel. Cualquier menú que quieras, se lo dices al hotelero y él lo saca de los respectivos restaurantes y te lo entrega. Aquí, el hotelero actúa como fachada , ya que oculta las complejidades del sistema hotelero.
Vamos a ver cómo funciona :

Interfaz de Hotel

package structural.facade;
public interface Hotel
{
    public Menus getMenus();
}

La interfaz del hotel solo devuelve Menús.
Del mismo modo, los Restaurantes son de tres tipos y pueden implementar la interfaz del hotel. Echemos un vistazo al código de uno de los restaurantes.

RestauranteNoVeg.java

package structural.facade;
  
public class NonVegRestaurant implements Hotel
{
    public Menus getMenus()
    {
        NonVegMenu nv = new NonVegMenu();
        return nv;
    }
}

VegRestaurant.java

package structural.facade;
  
public class VegRestaurant implements Hotel
{
    public Menus getMenus()
    {
        VegMenu v = new VegMenu();
        return v;
    }
}

VegNonBothRestaurant.java

package structural.facade;
  
public class VegNonBothRestaurant implements Hotel
{
    public Menus getMenus()
    {
        Both b = new Both();
        return b;
    }
}

Ahora consideremos la fachada,

HotelKeeper.java

package structural.facade;
  
public class HotelKeeper
{
    public VegMenu getVegMenu()
    {
        VegRestaurant v = new VegRestaurant();
        VegMenu vegMenu = (VegMenu)v.getMenus();
        return vegMenu;
    }
      
    public NonVegMenu getNonVegMenu()
    {
        NonVegRestaurant v = new NonVegRestaurant();
        NonVegMenu NonvegMenu = (NonVegMenu)v.getMenus();
        return NonvegMenu;
    }
      
    public Both getVegNonMenu()
    {
        VegNonBothRestaurant v = new VegNonBothRestaurant();
        Both bothMenu = (Both)v.getMenus();
        return bothMenu;
    }    
}

A partir de esto, está claro que la implementación compleja la realizará el propio HotelKeeper. El cliente simplemente accederá a HotelKeeper y solicitará el menú del restaurante Veg, NonVeg o VegNon Both.

¿Cómo accederá el programa cliente a esta fachada?

package structural.facade;
  
public class Client
{
    public static void main (String[] args)
    {
        HotelKeeper keeper = new HotelKeeper();
          
        VegMenu v = keeper.getVegMenu();
        NonVegMenu nv = keeper.getNonVegMenu();
        Both = keeper.getVegNonMenu();
  
    }
}

De esta manera la implementación se envía a la fachada. El cliente recibe solo una interfaz y solo puede acceder a ella. Esto esconde todas las complejidades.

¿Cuándo se debe utilizar este patrón?

El patrón de fachada es apropiado cuando tiene un sistema complejo que desea exponer a los clientes de manera simplificada, o si desea crear una capa de comunicación externa sobre un sistema existente que es incompatible con el sistema. Facade se ocupa de las interfaces, no de la implementación. Su propósito es ocultar la complejidad interna detrás de una sola interfaz que parece simple en el exterior.
 

Lectura adicional: método de fachada en Python

Este artículo es una contribución de Saket Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *