PATRÓN FLYWEIGHT

Clasificación:

Patrón Estructural.

Propósito:

Compartir   estados para  soportar  un  gran  número de  objetos  pequeños aumentando la eficiencia en espacio.

Intención:

 Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.

Motivación:

Describe cómo almacenar un  gran  número  de  objetos   sin  un   gran coste, para conseguir esto se utilizan objetos que almacenan  los estados  compartidos y que pueden   ser   usados  por   varios   objetos simultáneamente.

Aplicabilidad:

 Cuando se cumplan las siguientes características:

  • Se utiliza un gran número de objetos.
  • El coste de almacenamiento es alto debido a la cantidad de objetos.
  • La mayoría de los estados de los objetos pueden ser creados como comunes.
  • Muchos objetos pueden ser reemplazados por unos pocos una vez que han sido borrados los estados no comunes.
  • La mayor parte del estado del objeto puede ser extrínseco.

Estructura:

Los participantes:

  • Flyweight

Declaran una interface a través de la que flyweights pueden recibir y actuar sobre estados no compartidos.

  • ConcreteFlyweight: 

Implementa  la  interfaz  Flyweight  y  almacena  los estados    compartidos,    si   los   hay.   Un    objeto ConcreteFlyweight  debe ser compartible. Cualquier estado que almacene  debe ser intrínseco; es decir, debe ser independiente de su contexto.

  • UnsharedConcreteFlyweight: 

No  todas  las  subclases  de  Flyweight  tienen  por  qué ser compartidas. La interfaz Flyweight permite que se comparta; no lo fuerza. Es común que los objetos de esta clase tengan hijos  de la  clase ConcreteFlyweight  en  algún  nivel  de  su estructura.

  • FlyweightFactory: 

Crea y gestiona los objetos flyweight;  garantiza que los  objetos  flyweight  se  comparten  de  forma apropiada. Cuando un cliente solicita un flyweight, el objeto de la clase FlyweightFactory proporciona una instancia existente, o crea una.

  • Client:

Contiene referencias a los flyweights,  calculando o almacenando los estados no compartidos de los flyweights.

Colaboraciones:

Los clientes no crean directamente los objetos Flyweight, sino que deben invocar las fábricas.  El estado extrínseco es mantenido por el cliente y pasado cuando se invocan métodos que lo requieren

Consecuencias:

 Ventajas:

Produce ahorro de la capacidad almacenamiento

Reduce el número total de objetos

Reduce en gran cantidad el peso de los datos en un servidor .

Desventajas:

Consume un poco mas de tiempo para realizar las busquedas. 

Implementación:

........ Código en construcción......

Usos conocidos:

 ET + + [WGM88] utiliza para apoyar flyweights look-and-feel , norma afecta a la disposición de elementos de interfaz de usuario (por ejemplo, desplazarse barras, botones, menús, conocidas colectivamente como "widgets") y su decoración (por ejemplo, sombras, biselado). Un widget todos los delegados de su configuración y el comportamiento de dibujo Diseño de un objeto. Cambiar el diseño de objetos cambia el aspecto y, incluso en tiempo de ejecución. 

Patrones relacionados:

Es a menudo combinado con el patrón composite al aplicar una estructura jerárquica, lógicamente, en términos de un gráfico acíclico dirigido - compartida con la hoja de nodos.  A menudo es mejor para la aplicación de state y strategy como objetos flyweights . 

Referencias:

PDF-Departamento de Sistemas Informáticos y Programación Curso de doctorado 1999 - 2000 Patrones  de  diseño orientado a objetos. 

DesIgn Patterns: Elements of Reusable Object-Oriented Software Gamma, Helm, Johnson,   Vlissides Editorial              Addison-Wesley.

www.ldc.usb.ve/~mgoncalves/IS2/sd07/grupo5.ppt

1 comentario:

  1. Oye mi amiga me hace falta este código para la tarea, lo habrás terminado ya? es que dice en construcción

    ResponderEliminar