question basique de design
Bonjour,
J'ai trois solutions à un problème, mais je ne sais pas laquelle choisir! (et c'est un autre problème ^^) Bref, je développe un logiciel pour PDA (donc avec ressources limitées) et j'ai une IG avec plein de trucs dans mes menus. Voici comment j'ai organisé mes ActionListeners jusqu'à présent:
Code:
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
|
// Action classes
class NewAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
newDocument();
}
}
class OpenAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
loadDocument();
}
}
class SaveAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
saveDocument();
}
}
// related methods
void newDocument() {}
void saveDocument() {}
void loadDocument() {} |
Mais je me suis dit que créer une seule classe de Listener serait peut être plus économique pour la memoire:
Code:
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
|
enum actionType {
newFile, openFile, saveFile
}
// Special Class Menu Action
class MenuAction implements ActionListener {
actionType action;
MenuAction(actionType actionType) {
action = actionType;
}
public void actionPerformed(ActionEvent arg0) {
switch (action) {
case newFile:
newDocument();
break;
case openFile:
loadDocument();
break;
case saveFile:
saveDocument();
break;
}
}
} |
ou même encore utiliser une factory (j'ai pas encore l'habitude donc je sais pas si c'est vraiment adapté). Mais je suis embeté car les Listeners étant des classes internes je ne peux créer une classe de factory dans un fichier séparé qui puisse créer ces listeners.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
// Action Factory
ActionListener actionFactory(actionType action) {
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {}
};
switch (action) {
case newFile:
listener = new NewAction();
case openFile:
listener = new OpenAction();
case saveFile:
listener = new SaveAction();
}
return listener;
} |
Merci pour vos conseils!
Renaud