Timeline
Chat
Prospettiva
Lazy initialization
Da Wikipedia, l'enciclopedia libera
Remove ads
Nella programmazione software, si dice lazy initialization (lett. "inizializzazione pigra") la tattica di istanziare un oggetto, inizializzare una variabile, effettuare un calcolo o eseguire un processo solo nel momento in cui tale operazione è richiesta.
Tipicamente, questo si ottiene memorizzando in un flag l'avvenimento di un determinato processo: ogni volta che avviene un certo evento si esamina il flag. Se questo è abbassato, si continua, altrimenti si inizializza una certa variabile o si istanzia un certo oggetto.
Remove ads
La lazy factory
Riepilogo
Prospettiva
Dal punto di vista dei design pattern, la lazy initialization si usa spesso con un factory method. Questo combina tre idee:
- usare un factory method per instanziare una classe;
- memorizzare l'istanza di una mappa, in modo tale da poter riprendere la stessa istanza la volta successiva che la si richiede con certi parametri (confronta con un singleton);
- usare la lazy initialization per istanziare un oggetto la prima volta che è richiesto.
Un piccolo esempio (in Java): la classe Frutta
viene impiegata a soli fini esemplificativi per mostrare questo pattern di inizializzazione.
import java.util.*;
public class Frutta {
/**
* Mappatura tra tipo di frutta (String) e la sua istanza (Frutta)
*/
private static Map<String, Frutta> tipologie = new HashMap<String, Frutta>();
/**
* Contiene il tipo di Frutta dell'istanza corrente
*/
private String tipo;
/**
* Costruttore privato per forzare l'uso del metodo factory.
* @param tipo Stringa che descrive il tipo di frutta da istanziare
*/
private Frutta(String tipo){
this.tipo=tipo;
tipologie.put(tipo, this);
}
/**
* Metodo Lazy con pattern Factory: recupera un'istanza di Frutta associata ad un certo tipo,
* se presente, altrimenti istanzia un nuovo oggetto.
* @param tipo Una stringa che descrive un tipo di frutta, ad esempio "mela"
* @return Una istanza di Frutta associata al tipo
*/
public static Frutta getFrutta(String tipo) {
Frutta f;
if (tipologie.containsKey(tipo)){
f = tipologie.get(tipo); // recupera l'istanza di quel tipo
} else {
f = new Frutta(tipo); // inizializzazione lazy (pigra)
}
return f;
}
}
La tecnica può essere usata anche in un linguaggio non orientato agli oggetti.
Remove ads
Voci correlate
- Design pattern
- anti-pattern
- Design Patterns - libro
- Singleton (informatica) - per un elegante esempio di impiego della lazy initialization
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads