- BEZIAT Maxime
- BARBE Matthieu
Patron Singleton
//patron singleton
private static final ActionListTaskList uniqueInstance = new
ActionListTaskList();
public static ActionListTaskList getInstance() {
return uniqueInstance;
}
L’objectif du patron “singleton” est de nous assurer qu’une seule instance soit créée. Par exemple, un
seul fichier système peut être créé, ainsi qu’un seul gestionnaire de fenêtres.
package application.action;
import java.util.List;
import com.codurance.training.tasks.BlocNote;
import com.codurance.training.tasks.Projet;
import com.codurance.training.tasks.Tache;
import application.GenericAction;
@Override
public void execute(Object e) throws Exception {
Projet p = null;
if (p == null) {
System.out.printf("Could not find a project with the
name \"%s\".", ((Projet) e).getName());
System.out.println();
return;
}
((BlocNote) e).setNumTache();
((BlocNote) e).ajouterTache(p,t);
}
@Override
public String actionMessage() {
return name;
}
@Override
public int getNbParam() {
return 2;
}
}
Le patron composite est assez difficile à mettre en œuvre pour ceux qui nous ont fait perdre
beaucoup de temps de développement et d’optimisation au début.
L’ajout d’action se fait très simplement une fois que le patron composite est implémenté.
Ici, on va transformer notre menu en plusieurs objets qui nous permettent de modifier les
commandes ou d’en ajouter et supprimer très facilement.
Patron Factory
On aurait pu dans notre programme ajouter le Patron Factory afin de prévoir les futures
modifications de notre application puisque cela nous aurait laissé le choix aux sous-classes des
classes à instancier.
Au cours de ce projet, nous avons aussi vu différent Patron de Conception sur Internet que l’on a pas
vu en cours (Patron Commande, patron de Méthode, patron Monteur, …).
Ces différents patrons tel que le patron Commande aurait pu être ajouté dans notre application afin
d'améliorer la flexibilité et la simplicité de notre code.
Patron Commande
@Test
public void testAddTask() {
ActionAddTask actionAddTask = new ActionAddTask();
System.out.println(actionAddTask.getNbParam());
assertEquals(actionAddTask.getNbParam(),2);
}
@Test
public void testAddProject() {
ActionAddProject actionAddProject = new
ActionAddProject();
System.out.println(actionAddProject.getNbParam());
assertEquals(actionAddProject.getNbParam(),1);
}
@Test
public void testCheck() {
ActionCheck actionCheck = new ActionCheck();
System.out.println(actionCheck.getNbParam());
assertEquals(actionCheck.getNbParam(),1);
}
@Test
public void testUncheck() {
ActionUncheck actionUncheck = new ActionUncheck();
System.out.println(actionUncheck.getNbParam());
assertEquals(actionUncheck.getNbParam(),1);
}
@Test
public void testHelp() {
ActionHelp actionHelp = new ActionHelp();
System.out.println(actionHelp.getNbParam());
assertEquals(actionHelp.getNbParam(),0);
}
@Test
public void testShow() {
ActionShow actionShow = new ActionShow();
System.out.println(actionShow.getNbParam());
assertEquals(actionShow.getNbParam(),0);
}
Pour simplifier le programme, nous avons ajouté au lancement du programme la liste des
commandes qu’il est possible de lancer.
Messages d’erreurs
Dans notre version du programme, nous avons aussi mis en place un système de message lorsque
l’utilisateur essaie de cocher, décocher un projet qui ne peut pas exister (avec caractère).
Il y a aussi un message d’erreur si on essaye de cocher ou décocher un projet qui n’a pas été créé.
7. Conclusion
Ce projet de CPOA nous a permis de connaître et comprendre beaucoup de patrons même en dehors
des heures de cours.
Ces Patrons qui peuvent être parfois “dur” à être implémenté ou “simple” permettent aux
programmes d’être plus flexible, maintenable mais surtout beaucoup plus compréhensible dans
l’ensemble.