2009-04-03 6 views

Répondre

16

L'attribution différée signifie simplement ne pas allouer une ressource tant qu'elle n'est pas réellement nécessaire. C'est commun avec les objets singleton, mais à proprement parler, chaque fois qu'une ressource est allouée aussi tard que possible, vous avez un exemple d'allocation paresseuse. En retardant l'allocation d'une ressource jusqu'à ce que vous en ayez réellement besoin, vous pouvez diminuer le temps de démarrage et même éliminer complètement l'allocation si vous n'utilisez jamais réellement l'objet. En revanche, vous pouvez préallouer une ressource dont vous pensez avoir besoin plus tard, ce qui peut rendre l'exécution ultérieure plus efficace au détriment du temps de démarrage, et évite également que l'allocation échoue plus tard dans l'exécution du programme.

Le code suivant donne un exemple d'un singleton paresseusement alloué:

public class Widget { 
    private Widget singleton; 

    public static Widget get() { 
     if (singleton == null) { 
      singleton = new Widget(); 
     } 
     return singleton; 
    } 

    private Widget() { 
     // ... 
    } 

    // ... 
} 

Prenez note que ce code n'est pas threadsafe. Dans la plupart des cas, l'accès à la méthode get() doit être synchronisé d'une manière ou d'une autre.

Un concept similaire (et peut-être plus général) est lazy initialization.

+0

sont les termes "objets en retard" et "paresseux init"? Comme dans le titre de ce texte * Java Comment programmer: Late Objects Version *? J'ai googlé mais je n'ai trouvé aucune référence au-delà de ce texte. – hydeph

+1

@hydeph, on dirait que Deitel a deux versions de ce livre, une avec "late objects", où les chapitres initiaux sont en style procédural (et introduisant des classes/objets plus tard) et un avec des "early objects", où classes/objets sont présentés immédiatement. Ils utilisent des «objets tardifs» et des «objets précoces» pour distinguer ces styles d'enseignement. Il n'a aucune relation avec l'initialisation paresseuse. –

Questions connexes