Good Evening,L'identification d'une classe qui étend une classe abstraite
Je fais une modification majeure de http://wiki2xhtml.sourceforge.net/ pour finalement obtenir une meilleure vue d'ensemble et maintenabilité. (J'ai commencé le projet lorsque j'ai décidé de commencer la programmation, si – vous obtenez, à droite,?))
En ce moment je me demande comment résoudre le problème que je vais vous décrire maintenant:
Chaque fichier sera être mis à travers plusieurs parseurs (comme un des liens, une pour les tables, une pour les images, etc.):
public class WikiLinks extends WikiTask { ... }
public class WikiTables extends WikiTask { ... }
Les fichiers seront ensuite analysée de cette façon:
public class WikiFile {
...
public void parse() {
//Run all parsers on this file.
if (!parse) return;
WikiTask task = new WikiLinks();
do {
task.parse(this);
} while ((task = task.nextTask()) != null);
}
}
Parfois, je peux vouloir utiliser aucun analyseur (pour les fichiers qui ont seulement besoin d'être copiés), ou seulement un analyseur choisi (par ex. à des fins de test). Donc, avant d'exécuter task.parse(), j'ai besoin de vérifier si cet analyseur est réellement nécessaire/désiré. (Peut-être via Blacklist ou Whitelist.)
Que suggéreriez-vous pour la comparaison? Un identifiant pour chaque WikiTask (comment faire?)? Comparaison de la tâche Object elle-même avec une nouvelle instance d'une WikiTask (overhead)?
Oui, pas d'analyse du tout fonctionne déjà. Exécuter seulement certains parseurs ne fonctionne pas encore. - Désolé de ne pas être clair, la fonction parse() que j'ai décrite ci-dessus ne fait pas partie d'une WikiTask, mais d'un objet File. Appeler parse() sur l'objet WikiFile exécute tous les analyseurs disponibles tant qu'il y en a un suivant (j'utilise
task.nextTask()
car l'ordre est important). - Utiliser une énumération pour identifier les analyseurs pourrait être la solution la plus simple, car ils sont aussi légers. –