J'ai une classe qui représente une page de base avec les boutons "retourner", "aller de l'avant" et "canel" dans Wicket. Mais toutes les pages n'ont pas tous les boutons, e. g. la première page n'a pas "revenir" évidemment.Champ protégé contre méthode protégée vs implémentation de l'interface pour les gestionnaires d'actions
Mon idée est de définir un actionHandler générique
public interface ActionHandler {
void perform();
}
et laisser les sous-classes retournent actions qu'ils soutiennent:
public Derived extends BasicPage {
protected ActionHandler getForwardHandler() {
return new ActionHandler() {
void perform() {
doIt();
}
};
}
}
La question est: pourquoi ne pas utiliser des champs protégés?
public Derived extends BasicPage {
protected forwardHandler = new ActionHandler() {
void perform() {
doIt();
}
};
}
Une autre option serait de ne pas utiliser l'héritage (qui n'a pas de sens vraiment ici) et définir les ActionHandlers de l'extérieur:
Toolbar toolbar = new Toolbar();
toolbar.setForwardHandler(new ActionHandler() {
void perform() {
doIt();
}
});
La raison pour laquelle je ne suis pas en utilisant des interfaces comme ForwardHandler, et CancelHandler est, que je veux passer le gestionnaire à une barre d'outils, ce qui prend ActionHandlers comme paramètres. Ou passeriez-vous la page entière à la barre d'outils et laissez la barre d'outils décider quels boutons afficher en fonction des interfaces implémentées? On dirait une mauvaise OOP pour moi.
L'idée est que chaque page doit définir une nouvelle barre d'outils, mais il serait peut-être plus simple ...
Si j'utilisais une "implémentation par défaut qui ne fait rien", j'ai dû regarder via les réflexions quelles méthodes sont remplacées, pour n'afficher que les boutons avec des actions réelles. – deamon