TD 4: Design Patterns
Introduction
Créez un projet à partir de l'archive
tp4-start.zip:.
C'est une correction quasi-complète du TD précédent. Prenez un peu de temps pour retrouver les éléments de solution dans le projet.
Exercice 1: Corriger le simulateur (pattern Observer)
Vous avez remarqué qu'il y a une classe
Launcher
avec une méthode
main
et que l'on s'en sert pour démarrer le simulateur. Dans la version actuelle, you verrez que cela ne marche pas vraiment. Vous devez corriger cela.

: tout est dans le titre...
Exercice 2: Corriger le resize de la fenêtre (le retour du pattern Observer)
Il y a encore un problème avec l'application lorsque vous retaillez l'image. Allez, on corrige !

: Allez jeter un oeil sur
JPanel#addComponentListener()
Exercice 3: la révolution industrielle de Frankenstein (pattern Factory et pattern Abstract Factory) - à terminer en deuxième séance
Comme ajouter une créature à la fois est assez embêtant, vous allez créer une usine
CreatureFactory
qui peut créer un ensemble de créatures d'un coup. On doit lui fournir au moins les dimensions du plan de simulation et le nombre de créatures à créer.
- Commencez par faire des créatures toutes de la même couleur.
- Réfléchissez ensuite à ce qu'il vous faut pour créer des créatures de différents types, comment abstraire la signature méthode de création "commune"

: Plusieurs remarques pour vous aider :
- Commencez bien par créer une factory par type de créatures. N'essayez pas de faire une Abstract Factory dès le départ.
- Chaque factory doit implémenter la même interface.
- Si vous avez l'impression de réimplémenter le constructeur, c'est un peu normal, la factory a un objectif (contrôle de conformité dans une famille, etc.).
- Appliquer le pattern factory récursivement, avec une usine à usine. La facture de plus haut niveau va ainsi devenir une forme d'Abstract Factory,
Vous pouvez même faire intervenir un pattern singleton pour finaliser l'architecture.
Exercice 4: Colorier (pattern Strategy) - à faire en deuxième séance
Colorions notre usine. Pour cela, il vous faut introduire un nouveau paramètre qui sera une référence sur une instance de
IColorPicker
qui aura une seule méthode
getNextColor()
. Ensuite vous implémentez plusieurs stratégies :
- une pour refaire la couleur unique
- une qui itère sur le cube de couleur (code déjà fourni dans les versions précédentes)
- une dernière qui fait des groupes de couleurs (10 d'une même couleur, puis 10 d'une autre...).
Une fois terminé, réfléchissez à l'interface : you devriez réaliser que c'est une forme d'itérateur, donc que vous auriez pu l'implémenter comme une simple interface
Iterator
. Quels seraient les avantages/inconvénients ?
--
PhilippeCollet - 01 Nov 2015
to top