fbpx
Wikipedia

Flyweight (patrón de diseño)

El patrón Flyweight (u objeto ligero) sirve para eliminar o reducir la redundancia cuando tenemos gran cantidad de objetos que contienen información idéntica, además de lograr un equilibrio entre flexibilidad y rendimiento (uso de recursos).

Representación gráfica del Flyweight.

Problema que soluciona editar

Tenemos una serie de objetos que contienen entre sus datos información que es idéntica y redundante (hablando en lógica de negocio). Si toda esa información redundante la contenemos sobre uno o varios elementos comunes y que estos sean referenciados por la serie de objetos iniciales conseguimos las siguientes mejoras:

  • Disminución del uso de recursos: el uso de referencias (punteros) suele ser óptimo que cada objeto tenga la información repetida en su interior.
  • Protección ante el cambio: al meter toda la información redundante en un elemento común, un cambio en dicha información hace que solo tengamos que tocar un único punto y no distribuir ese cambio en la información redundante en toda la serie de objetos, siendo esto último mucho más propenso a error.

Un ejemplo sería: necesitamos representar gráficamente muchas pelotas idénticas que rebotan en los bordes de una ventana, así que creamos una clase que tenga por atributos las coordenadas, el radio y el color con que se dibujará la pelota.

Problema: Aunque las coordenadas son distintas, como queremos que nuestras pelotas sean iguales, el radio y el color se repetirán en cada instancia, desperdiciando memoria.

Implementación editar

Crear una clase PelotaFlyweight, que contendrá la información común (radio y color) y otra clase PelotaConcreta, que contendrá las coordenadas concretas de cada pelota y una referencia a un objeto de tipo PelotaFlyweight.

Al crearse instancias de PelotaConcreta, se les deberá proveer de referencias a la instancia de PelotaFlyweight adecuada a nuestras necesidades.

En este caso solamente tendríamos una instancia de PelotaFlyweight, puesto que hemos dicho que todas nuestras pelotas tienen el mismo radio y color, pero pensando en un ejemplo en el que tuviéramos varios grupos de pelotas, y dentro de cada uno de los cuales se compartieran el radio y el color, se puede utilizar Flyweight conjuntamente con el patrón Factory, de tal modo que este último, en el momento en que se le soliciten instancias de PelotaConcreta con determinadas características (mismo radio y color que el solicitado), compruebe si ya existe un PelotaFlyweight con ese radio y color, y devuelva esa referencia o, en caso de que no exista, la cree y la registre. El patrón Factory se encargaría de gestionar los PelotaFlyweight existentes.

Pasos para aplicar el patrón editar

  1. Comprobar que el rendimiento en los objetos es un tema primordial, y si el cliente está dispuesto a asumir el reajuste.
  2. Dividir el objetivo principal en estados: estado intrínseco (elementos que se puedan compartir o son comunes) y estado extrínseco (elementos particulares a cada tipo).
  3. Retirar los elementos con estado extrínseco de los atributos de la clase, y añádale más bien una llamada a métodos.
  4. Crear una fábrica que pueda almacenar y reutilizar las instancias existentes de clases.
  5. El cliente debe usar la fábrica en vez de utilizar el operador new si requiere de creación de objetos.
  6. El cliente (o un tercero) debe revisar los estados extrínsecos, y reemplazar esos estados a métodos de la clase.

Ventajas y Desventajas editar

Ventajas: Reduce en gran cantidad el peso de los datos en un servidor

Desventajas: Consume un poco más de tiempo para realizar las búsquedas

Enlaces externos editar

  • Página de patrones de diseño (en Inglés)


  •   Datos: Q1060964
  •   Multimedia: Flyweight pattern / Q1060964

flyweight, patrón, diseño, patrón, flyweight, objeto, ligero, sirve, para, eliminar, reducir, redundancia, cuando, tenemos, gran, cantidad, objetos, contienen, información, idéntica, además, lograr, equilibrio, entre, flexibilidad, rendimiento, recursos, repre. El patron Flyweight u objeto ligero sirve para eliminar o reducir la redundancia cuando tenemos gran cantidad de objetos que contienen informacion identica ademas de lograr un equilibrio entre flexibilidad y rendimiento uso de recursos Representacion grafica del Flyweight Indice 1 Problema que soluciona 2 Implementacion 3 Pasos para aplicar el patron 4 Ventajas y Desventajas 5 Enlaces externosProblema que soluciona editarTenemos una serie de objetos que contienen entre sus datos informacion que es identica y redundante hablando en logica de negocio Si toda esa informacion redundante la contenemos sobre uno o varios elementos comunes y que estos sean referenciados por la serie de objetos iniciales conseguimos las siguientes mejoras Disminucion del uso de recursos el uso de referencias punteros suele ser optimo que cada objeto tenga la informacion repetida en su interior Proteccion ante el cambio al meter toda la informacion redundante en un elemento comun un cambio en dicha informacion hace que solo tengamos que tocar un unico punto y no distribuir ese cambio en la informacion redundante en toda la serie de objetos siendo esto ultimo mucho mas propenso a error Un ejemplo seria necesitamos representar graficamente muchas pelotas identicas que rebotan en los bordes de una ventana asi que creamos una clase que tenga por atributos las coordenadas el radio y el color con que se dibujara la pelota Problema Aunque las coordenadas son distintas como queremos que nuestras pelotas sean iguales el radio y el color se repetiran en cada instancia desperdiciando memoria Implementacion editarCrear una clase PelotaFlyweight que contendra la informacion comun radio y color y otra clase PelotaConcreta que contendra las coordenadas concretas de cada pelota y una referencia a un objeto de tipo PelotaFlyweight Al crearse instancias de PelotaConcreta se les debera proveer de referencias a la instancia de PelotaFlyweight adecuada a nuestras necesidades En este caso solamente tendriamos una instancia de PelotaFlyweight puesto que hemos dicho que todas nuestras pelotas tienen el mismo radio y color pero pensando en un ejemplo en el que tuvieramos varios grupos de pelotas y dentro de cada uno de los cuales se compartieran el radio y el color se puede utilizar Flyweight conjuntamente con el patron Factory de tal modo que este ultimo en el momento en que se le soliciten instancias de PelotaConcreta con determinadas caracteristicas mismo radio y color que el solicitado compruebe si ya existe un PelotaFlyweight con ese radio y color y devuelva esa referencia o en caso de que no exista la cree y la registre El patron Factory se encargaria de gestionar los PelotaFlyweight existentes Pasos para aplicar el patron editarComprobar que el rendimiento en los objetos es un tema primordial y si el cliente esta dispuesto a asumir el reajuste Dividir el objetivo principal en estados estado intrinseco elementos que se puedan compartir o son comunes y estado extrinseco elementos particulares a cada tipo Retirar los elementos con estado extrinseco de los atributos de la clase y anadale mas bien una llamada a metodos Crear una fabrica que pueda almacenar y reutilizar las instancias existentes de clases El cliente debe usar la fabrica en vez de utilizar el operador new si requiere de creacion de objetos El cliente o un tercero debe revisar los estados extrinsecos y reemplazar esos estados a metodos de la clase Ventajas y Desventajas editarVentajas Reduce en gran cantidad el peso de los datos en un servidorDesventajas Consume un poco mas de tiempo para realizar las busquedasEnlaces externos editarPagina de patrones de diseno en Ingles nbsp Datos Q1060964 nbsp Multimedia Flyweight pattern Q1060964 Obtenido de https es wikipedia org w index php title Flyweight patron de diseno amp oldid 156194744, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos