Lazy initialization: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Xqbot (discussione | contributi)
m La lazy factory: Aggiunto il tasto "Copia" nel blocco di codice
 
(14 versioni intermedie di 13 utenti non mostrate)
Riga 1:
{{F|programmazione|febbraio 2013}}
Nella [[programmazione (informatica)|programmazione]] software, si dice '''Lazy''lazy initialization''''' ({{Lett|inizializzazione pigra}}) la tattica di istanziare un [[Oggetto (informatica)|oggetto]], inizializzare una [[Variabile (informatica)|variabile]], effettuare un calcolo odo eseguire un [[Processo (informatica)|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.
 
Tipicamente, questo si ottiene memorizzando in un ''[[flag]]'' l'avvenimento di un determinato processo.: Ogniogni volta che avviene un certo evento, si esamina il ''flag''. Se questo è abbassato, si continua, altrimenti si [[Inizializzazione|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:
== La "lazy factory" ==
* usare un factory method per instanziare una classe;
Dal punto di vista dei [[design pattern]], la ''lazy initialization'' si usa spesso con un ''[[factory method]]''. Questo combina tre idee:
* memorizzare l'istanza di una mappa, in modo tale da poter riprendere la ''stessa'' istanza la volta successiva che si richiede la stessa con certi parametri (confronta con un [[singleton]]);
* 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 la stessa con certi parametri (confronta con un [[singleton (informatica)|singleton]]);
* usare la ''lazy initialization'' per istanziare un oggetto la prima volta che è richiesto.
 
Un piccolo esempio (in [[Java (linguaggio di programmazione)|Java]]): la classe <code>FruitFrutta</code> nonviene faimpiegata nullaa qui,soli questo è solo unfini esempioesemplificativi per mostrare lquesto ''pattern''architettura. La variabile <code>types</code> è una mappa usata per memorizzare le istanze di <code>Fruit</code> per tipoinizializzazione.
 
<syntaxhighlight lang="java" line="1" copy=1>import java.util.*;
<source lang=java>
import java.util.*;
public class FruitFrutta {
/**
private static Map types = new HashMap();
* Mappatura tra tipo di frutta (String) e la sua istanza (Frutta)
private String type;
*/
private static Map<String, typesFrutta> tipologie = new HashMap<String, Frutta>();
 
/**
* Contiene il tipo di Frutta dell'istanza corrente
*/
private String typetipo;
/**
// si* usa un costruttoreCostruttore privato per forzare l'uso del metodo factory.
private Fruit(String type){
* @param tipo Stringa che descrive il tipo di frutta da istanziare
this.type=type;
*/
types.put(type, this);
private FruitFrutta(String typetipo){
this.typetipo=typetipo;
typestipologie.put(typetipo, this);
}
/**
* Metodo Lazy con pattern Factory: method,recupera getsun'istanza thedi FruitFrutta instanceassociata associatedad withun acerto tipo,
* se presente, altrimenti istanzia un nuovo oggetto.
* certain type. Instantiates new ones as needed.
* @param typetipo AnyUna stringstringa thatche describesdescrive aun fruittipo typedi frutta, e.g.ad esempio "applemela"
* @return TheUna Fruitistanza instancedi associatedFrutta withassociata that type.al tipo
*/
public static FruitFrutta getFruitgetFrutta(String typetipo) {
FruitFrutta f;
if (typestipologie.containsKey(typetipo)){
f = (Fruit) typestipologie.get(typetipo); // get therecupera instancel'istanza fordi thatquel typetipo
} else {
f = new FruitFrutta(typetipo); // inizializzazione lazy initialization(pigra)
}
return f;
}
}</syntaxhighlight>
}
</source>
 
La tecnica può essere usata anche in un linguaggio non-[[object-oriented]] orientato agli oggetti.
 
== Voci correlate ==
Riga 47 ⟶ 57:
* [[anti-pattern]]
* [[Design Patterns]] - libro
* [[Singleton (informatica)]] - per un elegante esempio di impiego della ''lazy initialization''
 
{{portale|informatica}}
[[Categoria:Pattern]]
 
[[Categoria:PatternDesign pattern]]
[[bg:Късна инициализация (шаблон)]]
[[cs:Lazy initialization]]
[[en:Lazy initialization]]
[[pl:Leniwe inicjowanie (wzorzec projektowy)]]
[[ru:Отложенная инициализация]]
[[zh:惰性初始模式]]