This shows you the differences between two versions of the page.
wiki:pdd_4 [2024/09/02 00:06] – created admin | wiki:pdd_4 [2024/09/06 09:50] (current) – admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Proxy ====== | ====== Proxy ====== | ||
+ | |||
+ | **Contexto**: | ||
+ | |||
+ | <code java> | ||
+ | class BookSearch { | ||
+ | ... | ||
+ | Book getBook(String ISBN) { ... } | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Problema**: | ||
+ | |||
+ | **Solución**: | ||
+ | |||
+ | El objetivo de un proxy es mediar el acceso a un objeto base, agregándole funcionalidades, | ||
+ | |||
+ | <code java> | ||
+ | class BookSearchProxy implements BookSearchInterface { | ||
+ | |||
+ | private BookSearchInterface base; | ||
+ | |||
+ | BookSearchProxy (BookSearchInterface base) { | ||
+ | this.base = base; | ||
+ | } | ||
+ | |||
+ | Book getBook(String ISBN) { | ||
+ | if(" | ||
+ | return "libro del cache" | ||
+ | else { | ||
+ | Book book = base.getBook(ISBN); | ||
+ | if(book != null) | ||
+ | " | ||
+ | return book; | ||
+ | } | ||
+ | } | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | También debe crearse una interfaz '' | ||
+ | |||
+ | El siguiente código ilustra la instanciación del proxy. Primero, mostramos el código antes del proxy. En ese código (a continuación), | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | void main() { | ||
+ | BookSearch bs = new BookSearch(); | ||
+ | ... | ||
+ | View view = new View(bs); | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Con la decisión de usar un proxy, tendremos que modificar este código para instanciar el proxy (código a continuación). Además, '' | ||
+ | |||
+ | <code java> | ||
+ | BookSearch bs = new BookSearch(); | ||
+ | BookSearchProxy pbs; | ||
+ | pbs = new BookSearchProxy(bs); | ||
+ | ... | ||
+ | View view = new View(pbs); | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | |||
+ | La próxima figura ilustra los objetos y las referencias entre estos objetos, considerando la solución de usar un proxy. | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | Además de ayudar en la implementación de cachés, los proxies pueden usarse para implementar otros requisitos no funcionales. Algunos ejemplos incluyen: | ||
+ | |||
+ | * Comunicación con un cliente remoto, es decir, se puede usar un proxy para encapsular protocolos y detalles de comunicación. Estos proxies son llamados stubs. | ||
+ | |||
+ | * Asignación de memoria bajo demanda para objetos que consumen mucha memoria. Por ejemplo, una clase puede manejar una imagen de alta resolución. Entonces, podemos usar un proxy para evitar que la imagen esté cargada en la memoria principal todo el tiempo. Solo se cargará, posiblemente desde el disco, antes de la ejecución de algunos métodos. | ||
+ | |||
+ | * Controlar el acceso de varios clientes a un objeto base. Por ejemplo, los clientes deben estar autenticados y tener permiso para ejecutar ciertas operaciones del objeto base. Con esto, la clase del objeto base puede centrarse en la implementación de los requisitos funcionales. | ||