Patron Estrategia

3
LIBRO DE PATRONES ORIENTADOS A OBJETOS PATRON ESTRATEGIA PROPOSITO define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que los usan. TAMBIÉN CONOCIDO COMO policy (politica) MOTIVACIÓN Existen muchos algoritmos para dividir en líneas de flujo de texto. Codificar dichos algoritmos en las clases que los usan no resulta una buena práctica por varias razones: Los clientes que necesitan dividir el texto en líneas se vuelve más complejos si tienen que incluir dicho código, lo que hace más grandes y mas dificiles de mantener, sobre todo si permiten varios algoritmos diferentes de división en lineas. Los distintos algoritmos serán apropiados en distintos momentos. No tenemos pro qué permitir multiples algoritmos si no los vamos a usar todos. Es dificil añadir nuevos algoritmos o modificar los existentes cuando la division en líneas es parte integrar de un cliente. Estos problemas pueden evitarse definiendo clases que encapsulen los diferentes algoritmos de division en lineas. Un algoritmo asi encapslado se denomina una estrategia. Supongamos que una clase Composicion debe mantener y actualizar los saltos de línea del texto mostrado en el visor. Las estrategias de división en líneas no están implementadas en la clase Composicion. En

description

descripcion del patron estrategia

Transcript of Patron Estrategia

LIBRO DE PATRONES ORIENTADOS A OBJETOSPATRON ESTRATEGIA

PROPOSITOdefine una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Permite que un algoritmo vare independientemente de los clientes que los usan.

TAMBIN CONOCIDO COMOpolicy (politica)

MOTIVACINExisten muchos algoritmos para dividir en lneas de flujo de texto. Codificar dichos algoritmos en las clases que los usan no resulta una buena prctica por varias razones: Los clientes que necesitan dividir el texto en lneas se vuelve ms complejos si tienen que incluir dicho cdigo, lo que hace ms grandes y mas dificiles de mantener, sobre todo si permiten varios algoritmos diferentes de divisin en lineas. Los distintos algoritmos sern apropiados en distintos momentos. No tenemos pro qu permitir multiples algoritmos si no los vamos a usar todos. Es dificil aadir nuevos algoritmos o modificar los existentes cuando la division en lneas es parte integrar de un cliente.Estos problemas pueden evitarse definiendo clases que encapsulen los diferentes algoritmos de division en lineas. Un algoritmo asi encapslado se denomina una estrategia.

Supongamos que una clase Composicion debe mantener y actualizar los saltos de lnea del texto mostrado en el visor. Las estrategias de divisin en lneas no estn implementadas en la clase Composicion. En vez de eso, se implementan separadamente por las subclases de la clase abstracta Componedor. Las subclases Componedor implementan diferentes estrategias:

ComponedorSimple : implementa una estrategia simple que calcula un salto de linea cada vez. ComponedorTeX: implementa el algoritmo TeX para buscar los saltos de lnea. Esta estrategia trata de optimizar los saltos de lnea globalmente, es decir, un parrafi cada vez. ComponedorMatriz: implementa una estrategia que selecciona los saltos de linea de modo que cada fila tenga un numero determinado de elementos. Es util para dividir una serie de iconos en filas por ejemplo.Una composicion mantiene una referencia a un objeto Componedor. Cada vez que una Composicion vuelve a formatear su texto, reenva esta responsabilidad a su objeto Componedor. El cliente de Composicion especifica qu Componedor debera usarse, y dicho Componedor ser instalado en la Composicion.APLICABILIDADsese el patron Strategy cuando: muchas clases relacionadas difieren slo en su comportamiento. Las estrategias permiten configurar una clase con un determinado comportamiento entre muchos posibles. Se necesitan distintas variantes de un algoritmo. Por ejemplo, podriamos definir algoritmos que reflejasen distintas soluciones de compromiso entre tiempo y espacio. Pueden usarse estrategias cuando estas variantes se implementan como una jerarquia de clases de algoritmos. Un algoritmo usa datos que los clientes no deberan conocer. sese el patron Strategy para evitar exponer estructuras de datos complejas y dependientes del algoritmo. Una clase define muchos comportamientos, y stos se representan como mltiples sentencias condicionales en sus operaciones. En vez de tener muchos condicionales, podemos mover las ramas de stos a su propia clase Estrategia.

ESTRUCTURA

PARTICIPANTES Estrategia (Componedor) declara una interfaz comn para todos los algoritmos permitidos. El contexto usa esta interfaz para llamar al algoritmo definido por una EstructuraConcreta. EstrategiaConcreta(ComponedorSimple)