Bonjour,
Afin d'éviter de créer plusieurs instances d'objets ne le nécessitant pas (par exemple des communes) (Singleton?), je souhaiterais les charger au lancement de mon application.
J'ai codé quelque chose qui fonctionne mais je ne suis pas sûr que c'est la meilleure des solutions. Je vous demande donc votre avis
Le but ici est de charger des objets de type Commune.
Pour cela j'ai créé:
.une classe Commune (possédant id,libelle etc etc)
.une interface SingletonCtrl contenant la définition d'une méthode nommée LoadData().
.une interface CommuneCtrl héritant de l'interface SingletonCtrl et contenant les définitions de méthodes propres aux objets Commune.
.une classe CommuneCtrlImpl implémentant donc l'interface CommuneCtrl et surchargeant donc les méthodes de CommuneCtrl et de SingletonCtrl.
.et enfin une classe Singleton possédant une méthode statiques loadSingletons() dans laquelle je renseigne les classes héritant de SingletonCtrl (à voir si cela peut être fait automatiquement) et j'appelle les méthodes loadData() de ces différentes classes.
La méthode en question
Ainsi, pour charger toutes mes données, je fais un Singleton.loadSingletons(); dans ma classe Main.
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
22
23
24
25
26
27
28 public static void loadSingletons() throws ControleurException{ Class classeEnCours = null; listeClassCtrlSingleton = new ArrayList<Class>(); listeClassCtrlSingleton.add(CommuneCtrlImpl.class); listeClassCtrlSingleton.add(VarieteCtrlImpl.class); try { for (Class classe:listeClassCtrlSingleton){ classeEnCours = classe; Method[] tablMethode = classe.getMethods(); for (int i=0;i<tablMethode.length;i++){ if (tablMethode[i].getName().contains("loadData")){ tablMethode[i].invoke(classe.newInstance()); } } } } catch (IllegalArgumentException e) { gestionErreur(e,classeEnCours); } catch (IllegalAccessException e) { gestionErreur(e,classeEnCours); } catch (InvocationTargetException e) { gestionErreur(e,classeEnCours); } catch (InstantiationException e) { gestionErreur(e,classeEnCours); } }
Comme expliqué précédemment, le code fonctionne mais j'ai un gros doute concernant sa simplicité, son respect des normes etc etc.
Merci d'avance à ceux qui s'attarderont sur mon problème![]()







Répondre avec citation








... c'est quoi : "une classe statique dans une interface"
Partager