Patrón de diseño de proxy – Part 1

Proxy significa ‘en lugar de’, representando’ o ‘en lugar de’ o ‘en nombre de’ son significados literales de proxy y eso explica directamente el patrón de diseño de proxy .
Los proxies también se denominan sustitutos, identificadores y envoltorios. Están estrechamente relacionados en estructura, pero no en propósito, con adaptadores y decoradores .

Un ejemplo del mundo real puede ser un cheque o una tarjeta de crédito que es un proxy de lo que hay en nuestra cuenta bancaria. Se puede utilizar en lugar de efectivo y proporciona un medio para acceder a ese efectivo cuando sea necesario. Y eso es exactamente lo que hace el patrón Proxy: » Controla y administra el acceso al objeto que está protegiendo «.

Comportamiento

Como en el patrón decorador, los proxies se pueden enstringr. El cliente, y cada proxy, cree que está delegando mensajes al servidor real:

¿Cuándo usar este patrón?

El patrón de proxy se usa cuando necesitamos crear un contenedor para cubrir la complejidad del objeto principal del cliente.

Tipos de proxy

Proxy remoto:
Son los encargados de representar el objeto ubicado remotamente. Hablar con el objeto real puede implicar organizar y desorganizar datos y hablar con el objeto remoto. Toda esa lógica está encapsulada en estos proxies y la aplicación cliente no necesita preocuparse por ellos.

Proxy virtual:

Estos proxies proporcionarán algunos resultados predeterminados e instantáneos si se supone que el objeto real tardará algún tiempo en producir resultados. Estos proxies inician la operación en objetos reales y proporcionan un resultado predeterminado a la aplicación. Una vez que se realiza el objeto real, estos proxies envían los datos reales al cliente donde proporcionó datos ficticios anteriormente.

Proxy de protección:

Si una aplicación no tiene acceso a algún recurso, dichos proxies se comunicarán con los objetos en las aplicaciones que tienen acceso a ese recurso y luego recuperarán el resultado.

Proxy inteligente:

Un proxy inteligente proporciona una capa adicional de seguridad al interponer acciones específicas cuando se accede al objeto. Un ejemplo puede ser verificar si el objeto real está bloqueado antes de acceder a él para asegurarse de que ningún otro objeto pueda cambiarlo.

Algunos ejemplos

Un escenario de la vida real muy simple es nuestro Internet universitario, que restringe el acceso al sitio. El proxy primero verifica el host al que se está conectando, si no es parte de la lista de sitios restringidos, luego se conecta a Internet real. Este ejemplo se basa en proxies de protección.

Vamos a ver cómo funciona :

interfaz de internet

package com.saket.demo.proxy;
  
public interface Internet
{
    public void connectTo(String serverhost) throws Exception;
}

RealInternet.java

package com.saket.demo.proxy;
  
public class RealInternet implements Internet
{
    @Override
    public void connectTo(String serverhost)
    {
        System.out.println("Connecting to "+ serverhost);
    }
}

ProxyInternet.java

package com.saket.demo.proxy;
  
import java.util.ArrayList;
import java.util.List;
  
  
public class ProxyInternet implements Internet
{
    private Internet internet = new RealInternet();
    private static List<String> bannedSites;
      
    static
    {
        bannedSites = new ArrayList<String>();
        bannedSites.add("abc.com");
        bannedSites.add("def.com");
        bannedSites.add("ijk.com");
        bannedSites.add("lnm.com");
    }
      
    @Override
    public void connectTo(String serverhost) throws Exception
    {
        if(bannedSites.contains(serverhost.toLowerCase()))
        {
            throw new Exception("Access Denied");
        }
          
        internet.connectTo(serverhost);
    }
  
}

Cliente.java

package com.saket.demo.proxy;
  
public class Client
{
    public static void main (String[] args)
    {
        Internet internet = new ProxyInternet();
        try
        {
            internet.connectTo("geeksforgeeks.org");
            internet.connectTo("abc.com");
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

Como uno de los sitios se menciona en los sitios prohibidos,
ejecutar el programa dará el resultado:

Connecting to geeksforgeeks.org
Access Denied

Beneficios:

  • Una de las ventajas del patrón Proxy es la seguridad.
  • Este patrón evita la duplicación de objetos que pueden tener un tamaño enorme y un uso intensivo de la memoria. Esto a su vez aumenta el rendimiento de la aplicación.
  • El proxy remoto también garantiza la seguridad instalando el proxy de código local (stub) en la máquina cliente y luego accediendo al servidor con la ayuda del código remoto.

Inconvenientes/Consecuencias:

Este patrón introduce otra capa de abstracción que a veces puede ser un problema si algunos de los clientes acceden directamente al código RealSubject y algunos de ellos pueden acceder a las clases de Proxy. Esto podría causar un comportamiento dispar.

Puntos interesantes:

  • Hay pocas diferencias entre los patrones relacionados. El patrón Like Adapter brinda una interfaz diferente a su sujeto, mientras que los patrones Proxy brindan la misma interfaz que el objeto original, pero el decorador proporciona una interfaz mejorada. El patrón Decorator agrega un comportamiento adicional en tiempo de ejecución.
  • Proxy utilizado en la API de Java: java.rmi.*;

Lectura adicional: Método proxy 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 *