Inițializare leneșă

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Î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