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()