Flyweight es un patrón de diseño estructural que permite a los programas soportar grandes cantidades de objetos manteniendo un bajo uso de memoria.
El patrón lo logra compartiendo partes del estado del objeto entre varios objetos. En otras palabras, el Flyweight ahorra memoria RAM guardando en caché la misma información utilizada por distintos objetos.
En un juego de contraataque, el terrorista y el contraterrorista tienen distintos tipos de vestimenta. Por simplificar, asumamos que terrorista y contraterrorista tienen un tipo de vestimenta cada uno. El objeto vestimenta está integrado en el objeto jugador, como se ve a continuación.
A continuación se encuentra la estructura de un jugador. Podemos ver que el objeto vestimenta está integrado en la estructura del jugador:
Digamos que hay 5 terroristas y 5 contraterroristas, de modo que hay un total de 10 jugadores. Hay dos opciones en lo que respecta a la vestimenta.
Cada uno de los 10 objetos jugador crea un objeto vestimenta diferente y lo integra. Se creará un total de 10 objetos de vestimenta.
Creamos dos objetos de vestimenta:
Objeto único de vestimenta de terrorista: Lo compartirán 5 terroristas.
Objeto único de vestimenta de contraterrorista: Lo compartirán 5 contraterroristas.
Como puedes ver en la solución 1, se crea un total de 10 objetos de vestimenta, mientras que en la solución 2 solo se crean 2 objetos de vestimenta. La segunda solución es la que empleamos en el patrón de diseño Flyweight. Los dos objetos de vestimenta que creamos se denominan objetos flyweight.
El patrón Flyweight extrae las partes comunes y crea objetos flyweight. Estos objetos flyweight (vestimenta) pueden ser compartidos por muchos objetos (jugador). Esto reduce drásticamente el número de objetos de vestimenta y lo bueno es que, aunque crees más jugadores, será suficiente con dos objetos de vestimenta.
En el patrón Flyweight almacenamos los objetos flyweight en el campo mapa. Cuando se crean los otros objetos que comparten los objetos flyweight, los objetos flyweight se extraen del mapa.
Veamos qué partes de este sistema serán estados intrínsecos y extrínsecos:
Estado intrínseco: Vestimenta en el estado intrínseco, ya que puede ser compartido por varios objetos de terrorista y contraterrorista.
Estado extrínseco: La ubicación y el arma del jugador son un estado extrínseco, ya que son diferentes para cada objeto.