Bonsoir,
J'aimerai soumettre a votre avis la solution suivante.
D'abord mon problème : Dans le cadre d'une application web, je souhaite charger en memoire, une seule fois, le contenu d'une table dans une hashmap.
Selon la configuration, mon appli va alimenter cette hashmap avec la base d'intégration ou une base bouchonnée.
Ma solution : J'utilise GoogleGuice, qui selon la configuration de l'appli implemente un ProviderBDD ou un ProviderBouchon.
De l'autre cote mon singleton se trouve un peu balo car il ne connaitra la facon de s'initialiser qu'une fois appelé par un Provider.
J'ai donc ajoute une methode : initialisation(Connexion connection) a mon singleton.
J'obtient quelque chose comme ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class ProviderBDD implements IProvider { private Connection connectionBDD = ..; methode getMap(){ MaClasseSingleton.getInstance().getMap(connectionBDD); } } class ProviderBouchon implements IProvider{ private Connection connectionBouchon = ..; methode getMap(){ MaClasseSingleton.getInstance().getMap(connectionBouchon); } }Je voudrais le point de vue de personnes plus expérimentées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class MaClasseSingleton(){ private Boolean init=false; private static MaClasseSingleton instance; private HashMap maMap; private MaClasseSingleton(){} public static getInstance(){ ..} private void chargeTable(Connection connection){ //initialisation de maMap en utilisant la connection fournie en param init = true; } public getMap(Connection connection){ if(!init) MaClasseSingleton.getInstance().chargeTable(connection); return maMap; } }
Est ce que cette modélisation a du sens ? ou d'autres pattern permettent-ils de faire la même chose en mieux ?
Merci d'avance
Partager