Exercice : Virtual Proxy

Code source de l'énoncé
  1. Compilez le code de l'énoncé, exécutez le et vérifiez qu'un GrosObjet est créé dès qu'il est instancié (ce qui est la moindre des choses...).
  2. Transformez le code en introduisant un pattern Proxy : implémentez IGrosObjet et GrosObjetProxy.

    Dans main(), remplacez
            System.out.println("dans main() : avant instanciation de GrosObjet");
            GrosObjet go = new GrosObjet();
            System.out.println("dans main() : après instanciation de GrosObjet");
    
    par :
            System.out.println("dans main() : avant instanciation de GrosObjetProxy");
            IGrosObjet go = new GrosObjetProxy();
            System.out.println("dans main() : après instanciation de GrosObjetProxy");
    
    GrosObjetProxy doit contenir un mécanisme implémentant le lazy loading : une instance de GrosObjet n'est créée que lorsqu'il est vraiment utilisé.

    A l'exécution, cela donne l'affichage suivant :
    java TestAbstractProxy 
    
    dans main() : avant instanciation de GrosObjet
    dans main() : après instanciation de GrosObjet
    
    dans main() : appel à go.premièreMéthodeAyantVraimentBesoinDeGrosObjet()
        constructeur GrosObjet === Création très chère ===
        premièreMéthodeAyantVraimentBesoinDeGrosObjet()
    dans main() : appel à go.secondeMéthodeAyantVraimentBesoinDeGrosObjet()
        secondeMéthodeAyantVraimentBesoinDeGrosObjet()