Proxy – Patrones de diseño

Avatar
3 min lectura

El patrón de diseño Proxy es una técnica comúnmente utilizada en programación orientada a objetos para proporcionar una interfaz de acceso a un objeto real.

Esto se logra mediante la creación de un objeto “proxy” que actúa como intermediario entre el usuario y el objeto real, permitiendo controlar y manipular el acceso a ese objeto.

Ejemplo Proxy 1: Calculadora

En Kotlin, podemos implementar el patrón de diseño Proxy utilizando la palabra clave by en la declaración de una interfaz. Por ejemplo, si tenemos una interfaz llamada Calculator que tiene un método llamado sum:

interface Calculator {
    fun sum(a: Int, b: Int): Int
}

Podemos crear una clase llamada CalculatorProxy que implemente esta interfaz y actúe como intermediario para el objeto real que hace la operación de suma:

class CalculatorProxy(private val realCalculator: Calculator) : Calculator by realCalculator

En este caso, la clase CalculatorProxy está delegando la implementación del método sum al objeto realCalculator, que es el objeto real que hará la operación de suma.

De esta manera, podemos controlar el acceso a la operación de suma a través del objeto CalculatorProxy, permitiendo por ejemplo validar los parámetros de entrada o realizar algún tipo de cálculo adicional antes de delegar la operación al objeto real.

Ejemplo Proxy 2: Servidor remoto

Otro ejemplo de utilización del patrón de diseño Proxy en Kotlin puede ser el acceso a un servicio remoto. Supongamos que tenemos una interfaz llamada RemoteService que tiene un método llamado getData():

interface RemoteService {
    fun getData(id: Int): String
}

Podemos crear una clase llamada RemoteServiceProxy que implemente esta interfaz y actúe como intermediario para el objeto real que hace la llamada al servicio remoto:

class RemoteServiceProxy(private val realRemoteService: RemoteService) : RemoteService by realRemoteService

En este caso, la clase RemoteServiceProxy está delegando la implementación del método “obtenerDatos” al objeto realRemoteService, que es el objeto real que hace la llamada al servicio remoto.

De esta manera, podemos controlar el acceso a la llamada al servicio remoto a través del objeto RemoteServiceProxy, permitiendo por ejempl

o realizar validaciones de seguridad antes de delegar la llamada al objeto real.

Además, el patrón de diseño Proxy también nos permite implementar caché en la respuesta del servicio remoto, evitando realizar llamadas innecesarias si ya se ha obtenido previamente la misma información.

Conclusión

En resumen, el patrón de diseño Proxy nos permite proporcionar una interfaz de acceso controlado a un objeto real, permitiendo implementar funcionalidades adicionales como validaciones de seguridad o caché de respuestas.

Esto puede ser muy útil en diferentes escenarios, como en el acceso a servicios remotos o en la implementación de lógica de negocio compleja.

En Kotlin, podemos implementar el patrón de diseño Proxy utilizando la palabra clave by en la declaración de una interfaz, delegando la implementación de sus métodos a un objeto real.