Inițializare leneșă
Această intrare sau secțiune despre programare nu citează sursele necesare sau cei prezenți sunt insuficienți . |
În software-ul de programare , se spune tactici de inițializare leneșă ( inițializare leneșă) pentru a instanția un obiect, inițializa o variabilă, a efectua un calcul sau a executa un singur proces la un moment dat când este necesară o astfel de operație.
De obicei, acest lucru se realizează prin stocarea evenimentului unui anumit proces într-un steag . Ori de câte ori apare un anumit eveniment, se examinează steagul. Dacă aceasta este coborâtă, continuă, altfel se inițializează o anumită variabilă sau se instanțiază un anumit obiect.
„Fabrica leneșă”
Din punct de vedere al modelului de proiectare , inițializarea leneșă este adesea utilizată cu o metodă din fabrică . Aceasta combină trei idei:
- utilizați o metodă din fabrică pentru a instanția o clasă;
- stocați instanța unei hărți, în așa fel încât să puteți relua aceeași instanță data viitoare când este solicitată cu anumiți parametri (comparați cu un singur );
- utilizați inițializarea leneșă pentru a crea un obiect pentru prima dată când este necesar.
Un mic exemplu (în Java ): clasa Frutta
este utilizată doar în scop ilustrativ pentru a arăta acest model de inițializare.
import java.util. * ;
public class Fruit {
/ **
* Cartografierea între tipul de fruct (String) și instanța acestuia (Fruit)
* /
private static Map < String , Fruit > types = new HashMap < String , Fruit > ();
/ **
* Conține tipul de fruct al instanței curente
* /
tip șir privat ;
/ **
* Constructor privat pentru a forța utilizarea metodei din fabrică.
* @param type Șir care descrie tipul de fruct de instanțiat
* /
Private Fruit ( tip șir ) {
aceasta . tip = tip ;
tipuri . pune ( tip , asta );
}
/ **
* Metoda leneșă cu modelul Factory: preluați o instanță de Fruit asociată cu un anumit tip,
* dacă este prezent, altfel instanțiați un obiect nou.
* @param type Un șir care descrie un tip de fruct, cum ar fi „măr”
* @return O instanță de Fruit asociată cu tipul
* /
public static Fruit getFrutta ( tip șir ) {
Fructe f ;
if ( types . containsKey ( type )) {
f = tipuri . obține ( tip ); // obțineți instanța de acest tip
} altceva {
f = fruct nou ( tip ); // inițializare leneșă
}
retur f ;
}
}
Tehnica poate fi utilizată și într-un limbaj care nu este orientat spre obiecte .
Elemente conexe
- Modele de design
- anti-model
- Modele de proiectare - carte
- Singleton (calcul) - pentru un exemplu elegant de utilizare a inițializării leneșe