STRUCTURAL

Flyweight

Usare condivisione per supportare efficientemente un grande numero di oggetti a grana fine.

Il Problema

Creare un grande numero di oggetti simili consuma troppa memoria. Molti oggetti contengono dati duplicati.

La Soluzione

Estrarre lo stato condiviso (intrinseco) dagli oggetti e memorizzarlo in un pool di flyweight. Lo stato variabile (estrinseco) viene passato ai metodi quando necessario.

Struttura

Flyweight contiene stato intrinseco condiviso, FlyweightFactory gestisce pool di flyweight, Client mantiene stato estrinseco.

Partecipanti:
Flyweight - interfaccia per flyweight che riceve e agisce su stato estrinseco
ConcreteFlyweight - implementa interfaccia e memorizza stato intrinseco
FlyweightFactory - crea e gestisce oggetti flyweight, assicura condivisione
Client - mantiene riferimenti a flyweight e calcola/memorizza stato estrinseco
Esempi di Codice

Flyweight per Forest Rendering

Rendering efficiente di migliaia di alberi in una foresta condividendo mesh e texture.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Text editors - condivisione di character glyphs
Game development - sprite sharing per particles, bullets, enemies
UI frameworks - condivisione di icon/image resources
String pooling - Java String interning
Database connection pooling - riuso di connessioni
Quando Usarlo
Quando hai un grande numero di oggetti simili
Quando la memoria è una preoccupazione critica
Quando la maggior parte dello stato può essere estrinseco
Quando l'identità degli oggetti non è importante
Quando NON Usarlo
Quando hai pochi oggetti
Quando lo stato è prevalentemente estrinseco
Quando la complessità aggiunta non giustifica il risparmio di memoria
Pattern Correlati