PresentaciónGof Limbo
PresentaciónGof Limbo
PresentaciónGof Limbo
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.
• Copiar un objeto grande puede ser costoso, si la copia no se modifica, no hay necesidad de incurrir
en dicho costo.
Desventajas
• Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de direcciones.
Implementación
Objetivo
¿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
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
Patrones Relacionados
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.
Desventajas
• 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