Método proxy: patrones de diseño de Python

El método Proxy es un patrón de diseño estructural que le permite proporcionar el reemplazo de otro objeto. Aquí, usamos diferentes clases para representar las funcionalidades de otra clase. La parte más importante es que aquí creamos un objeto que tiene una funcionalidad de objeto original para proporcionar al mundo exterior.
El significado de la palabra Proxy es «en lugar de» o «en nombre de» que explica directamente el Método 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 .

Proxy-design-method proxy design pattern python

método de diseño proxy

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».

Problema sin usar el método proxy

Entendamos el problema considerando el ejemplo de la base de datos de la universidad que se encarga de todos los registros de los estudiantes. Por ejemplo, necesitamos encontrar el nombre de esos estudiantes de la base de datos cuyo cargo por saldo sea superior a 500. Entonces, si recorremos la lista completa de estudiantes y para cada objeto de estudiante si hacemos una conexión separada a la base de datos, entonces será resultó ser una tarea costosa.

Proxy-method-problem

Proxy-método-problema

Solución utilizando el método proxy

Aquí viene el Método Proxy para resolver el problema discutido anteriormente. Crearemos un servidor proxy o tal vez una conexión proxy a la base de datos y después de eso, no tenemos que crear conexiones separadas a la base de datos para cada objeto de estudiante.
Simplemente obtendremos los datos necesarios utilizando el proxy sin desperdiciar una gran cantidad de memoria para la creación del objeto.

Proxy-method-Solution

Solución de método proxy

class College:
    '''Resource-intensive object'''
  
    def studyingInCollege(self):
        print("Studying In College....")
  
  
class CollegeProxy:
    '''Relatively less resource-intensive proxy acting as middleman.
     Instantiates a College object only if there is no fee due.'''
  
    def __init__(self):
  
        self.feeBalance = 1000
        self.college = None
  
    def studyingInCollege(self):
  
        print("Proxy in action. Checking to see if the balance of student is clear or not...")
        if self.feeBalance <= 500:
            # If the balance is less than 500, let him study.
            self.college = College()
            self.college.studyingInCollege()
        else:
  
            # Otherwise, don't instantiate the college object.
            print("Your fee balance is greater than 500, first pay the fee")
  
"""main method"""
  
if __name__ == "__main__":
      
    # Instantiate the Proxy
    collegeProxy = CollegeProxy()
      
    # Client attempting to study in the college at the default balance of 1000.
    # Logically, since he / she cannot study with such balance,
    # there is no need to make the college object.
    collegeProxy.studyingInCollege()
  
    # Altering the balance of the student
    collegeProxy.feeBalance = 100
      
    # Client attempting to study in college at the balance of 100. Should succeed.
    collegeProxy.studyingInCollege()

Producción:

Proxy in action. Checking to see if the balance of student is clear or not...
Your fee balance is greater than 500, first pay the fee

Proxy in action. Checking to see if the balance of student is clear or not...
Studying In College....

Diagrama de clase

El siguiente es el diagrama de clases para el Método Proxy:

Proxy-method-Class-Diagram

Proxy-método-Class-Diagram

Ventajas

  • Principio Abierto/Cerrado: Sin cambiar el código del cliente, podemos introducir fácilmente los nuevos proxies en nuestra aplicación.
  • Servicio suave: el proxy que creamos funciona incluso cuando el objeto de servicio no está listo o no está disponible en el escenario actual.
  • Seguridad: el método proxy también proporciona seguridad al sistema.
  • Rendimiento: aumenta el rendimiento de la aplicación al evitar la duplicación de los objetos que pueden ser de gran tamaño y uso intensivo de memoria.

Desventajas

  • Respuesta lenta: es posible que el servicio se vuelva lento o se retrase.
  • Capa de abstracción: 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.
  • Aumenta la complejidad: nuestro código puede volverse muy complicado debido a la introducción de muchas clases nuevas.

Aplicabilidad

  • Proxy virtual: lo más importante utilizado en bases de datos, por ejemplo, existen ciertos datos que consumen muchos recursos en la base de datos y los necesitamos con frecuencia. asi que. aquí podemos usar el patrón de proxy que crearía múltiples proxies y apuntaría al objeto.
  • Proxy de protección: crea una capa protectora sobre la aplicación y puede usarse en los escenarios de escuelas o colegios donde solo unos pocos no. de los sitios web pueden abrirse con WiFi.
  • Proxy remoto: se usa particularmente cuando el objeto de servicio se encuentra en un servidor remoto. En tales casos, el proxy pasa la solicitud del cliente a través de la red y maneja todos los detalles.
  • Proxy inteligente: se utiliza para proporcionar seguridad adicional a la aplicación al intervenir acciones específicas cada vez que se accede al objeto.

Lectura adicional: método de diseño de proxy en Java

Publicación traducida automáticamente

Artículo escrito por chaudhary_19 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 *