Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

PresentaciónGof Limbo

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 21

Proxy

Objetivo

Tiene como propósito proporcionar un sustituto o intermediario de un objeto para controlar su acceso.

¿Cuándo lo utilizamos?
• Para controlar el acceso o proteger al componente real de una complejidad indebida.
• Para retrasar el costo de crear e inicializar el objeto hasta que realmente es necesario.
• Hacer uso de una referencia a un objeto más flexible o sofisticada que un puntero.

Un ejemplo en la vida real

Un cheque o giro bancario es un proxy


de fondos en una cuenta. Se puede
usar un cheque en lugar de efectivo
para realizar compras y, en última
instancia, controla el acceso al
efectivo en la cuenta del emisor.
Estructura
Tiene un referencia al objeto RealSubject, tiene un interfaz idéntica a la del Subject así un Proxy pude
sustituirse por RealSubject, y controla el acceso al RealSubject y puede ser el responsable de su creación y
borrado.

Subject: define una interfaz común para RealSubject y Proxy.

RealSubject: define el objecto real que Proxy representa.


Ventajas

• Mantiene un referencia que permite al proxy acceder al objeto real.

• Proporciona una interfaz igual que la del sujeto real.

• Controla el acceso al sujeto real y puede ser responsable de crearlo y borrarlo.

• Copiar un objeto grande puede ser costoso, si la copia no se modifica, no hay necesidad de incurrir
en dicho costo.

Desventajas

• Introduce un nivel complejidad adicional, que tiene muchos posible usos.

• Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de direcciones.
Implementación

1. Defina una interfaz que haga que


el proxy y el componente original
sean intercambiables.

2. La clase de Proxy contiene un


puntero a la clase real e
implementa la interfaz.

3. El puntero se puede inicializar en


la construcción o en el primer uso.
Patrones Relacionados

El patrón Adaptador proporciona una interfaz diferente al objeto


que adapta, mientras que el proxy tiene la misma interfaz,
pero ambos redirigen la petición del cliente al verdadero sujeto
que la ejecuta con la posibilidad de incorporar lógica adicional :
comprobación de acceso, creación del sujeto real…

El Proxy se puede diseñar de manera similar al patrón decorador,


pero el propósito es diferente: el decorador añade
responsabilidades a un objeto, el proxy sólo controla su acceso.
Interpreter

Objetivo

Permite crear una REPRESENTACIÓN para un LENGUAJE, para su GRAMÁTICA.


Teniendo la REPRESENTACIÓN, el patrón propone un interprete:
Crea un sistema que entiende y traduce esa REPRESENTACIÓN.

¿Cuándo lo utilizamos?

• Cuando hay un lenguaje que interpretar y se puede interpretar sus palabras como
árboles sintácticos abstractos. La gramática debe ser SIMPLE.
• Difícilmente el desarrollador utilice este patrón en algún momento de su vida, lo que no
quita que sea un patrón utilizado.
• La situación ideal que se debe considerar para aplicar este patrón es que exista un
lenguaje sencillo que pueda interpretarse con palabras.
Estructura

CONSTRUYE UN ÁRBOL
SINTÁCTICO ABSTRACTO DECLARA UNA INTERFAZ PARA LA
QUE REPRESENTA UNA EJECUCIÓN DE UNA OPERACIÓN
SENTENCIA PARTICULAR
EN EL LENGUAJE QUE LA
GRAMÁTICA DEFINE. EL
CLIENTE CONSTRUYE UNA
EXPRESIÓN

IMPLEMENTA UNA OPERACIÓN DE


INTERPRETACIÓN ASOCIADA CON
LOS SÍMBOLOS NO TERMINALES
DE LA GRAMÁTICA
CONTIENE INFORMACIÓN
GLOBAL PARA EL
INTERPRETE

IMPLEMENTA UNA OPERACIÓN ASOCIADA CON LOS


SÍMBOLOS TERMINALES DE LA GRAMÁTICA
Ejemplo UML

INFORMACIÓN COMÚN
A TODOS LOS OBJETOS
METODO INTERPRETE:
CLASE ABSTRACTA

EXPRESIONES
TERMINALES

EXPRESIONES
NO TERMINALES
Ejemplo: Interpretar los números romanos
5 7

6
Ventajas

• Facilidad para cambiar la gramática, mediante herencia, dado que las diferentes reglas
se representan con objetos.
• Facilidad para implementar la gramática, dado que las implementaciones de las clases
nodo del árbol sintáctico son similares, pudiendo usarse para ello generadores
automáticos de código.
• Facilidad para introducir nuevas formas de “interpretar” las expresiones en la gramática.

Desventajas

• Limitación en el tipo de gramática: si no es simple, es casi imposible implementarlo.


• No es conveniente utilizarlo si la eficiencia es un punto clave.

Patrones Relacionados

Este patrón es un caso especial de “Composite”, aplicado al parseo. El parseo


transforma una entrada de texto en una estructura de datos (usualmente un
árbol) que es apropiada para ser procesada. Generalmente los parseadores
primero identifican los símbolos de la entrada y luego construyen el árbol de
parseo para esos símbolos.
Template Method

Objetivo

Definir el esqueleto de un algoritmo en una superclase, dejando que las subclases puedan sobrecargar
ciertos pasos de este algoritmo sin modificar su estructura.

¿Cuándo lo utilizamos?
Cuando tenemos dos o mas clases que comparten mucho de su comportamiento, pero que presentan
ciertas variaciones, lo que hace que tengamos código repetido y que ante una modificación en el mismo
se deban duplicar los esfuerzos.

Un ejemplo en la vida real

Distintas variaciones en la construcción


de una casa
Estructura
AbstractClass – Clase base que declara los métodos que actúan como pasos del
algoritmo, así como el método template que los llama en un orden determinado. Los pasos
pueden ser abstractos o tener una implementación default.

ConcreteClass – Subclases que pueden sobrescribir cualquiera de los pasos, pero no el


método template.
Ventajas
• Permite transformar un algoritmo monolítico en una serie de pasos que pueden ser extendidos por
las subclases, manteniendo la estructura intacta en la superclase.

• Se generaliza el código duplicado en una superclase.

• Si se requiere modificar el algoritmo, se minimiza la cantidad de lugares donde se modifica.

Desventajas

• Algunos clientes se pueden ver limitados por la estructura.

• Se puede violar el principio de substitución de Liskov al suprimir alguno de los pasos a implementar en
una subclase.

• Pueden ser mas difíciles de mantener, a medida que tengan mas pasos.
Implementación
1. Analizar el algoritmo para ver si se puede dividir en
pasos, y considerar cuales serán comunes a todas las
subclases y cuales únicos

1. Crear la superclase abstracta y declarar el método


template y los métodos abstractos que representaran
los pasos del algoritmo. Definir la estructura del
algoritmo en el método template y considerar marcarlo
como final para evitar que las subclases lo puedan
sobrecargar.

2. Considerar agregar métodos “hooks” (métodos


implementados en la clase base con cuerpo vacío)
entre los pasos cruciales del algoritmo.

1. Crear una nueva subclase por cada variación del


algoritmo.
Patrones Relacionados

Strategy es similar a Template Method. La diferencia es que


Template Method trabaja a nivel de clase, es estático. Strategy
permite alterar el comportamiento de un objeto en tiempo de
ejecución, al suministrarle distintas estrategias.

Factory Method es una especialización de Template Method.


El paso modificado por las subclases es la creación de un
objeto.

También podría gustarte