Nella programmazione software, si dice lazy initialization () 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.

La lazy factory 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.

Voci correlate Design pattern Anti-pattern Design Patterns (saggio) Singleton (informatica)

Categoria:Design pattern