TP3 : Factories

De $1

Introduction

Vous commencez ce TP avec la version corrigée du TP précédent.

Nous fournissons également un ensemble de changements pour ajouter plus de variabilité au projet : td3-util.zip.

Cette archive contient les fichiers suivants :

  • AbstractCreature : le code a été modifié pour intégrer les méthodes distanceFromAPoint et directionFromAPoint. Ces méthodes sont utilisées par les nouvelles créatures fournies.
  • BouncingCreature : il s'agit d'une créature se déplaçant en changeant à intervalle régulier de direction et de vitesse de manière aléatoire (voir méthode applyNoise). Elle a également la particularité de "rebondir" sur les parois de l'environnement. 
  • SmartCreature : il s'agit d'une créature se déplaçant en troupeau : elle utilise son champ de vision pour repérer les créatures autour d'elle (voir méthode creaturesAround), tenter de s'en rapprocher un maximum et d'adapter sa vitesse et sa direction par rapport à ces créatures.
  • Launcher : nous redonnons un nouveau Launcher disposons d'un scanner et de méthodes permettant de demander à l'utilisateur, via la console, un type et un nombre de créature à simuler (attention, en l'état le Launcher démarre une simulation vide).

Simple factories

Vous disposez désormais de 4 types différents de créatures (Stupid, Smart, Bouncing et Crabe). Réalisez une factory pour chacune de ces créatures. Ne vous souciez pas pour le moment du décorateur réalisé au TP précédent.

Quel patron est-il intéressant d'implémenter également avec la factory ?

Testez vos factory en créant une simulation pour chaque type de créature, sans utiliser le scanner du Launcher.

Une simulation sur mesure

Nous souhaitons désormais que l'utilisateur puisse choisir, via la console, le type et le nombre de créatures à réaliser. 

Réflechissez aux avantages et inconvéniants des patrons Builder et AbstractFactory dans cet objectif. Implémentez la solution qui vous parait la plus simple et la plus propre en réfléchissant aux problèmatiques d'évolutions de votre code : comment faire si on ajoute un nouveau type de créature ? 

Laissez de côté pour cette question le décorateur.

Beaucoup plus de choix ... 

On souhaite que l'utilisateur puisse choisir plusieurs types de créatures pour une même simulation.

Quel type de patron semble le mieux convenir dans ce cas ?

Faites du refactoring si besoin pour adapter votre code à ce patron. 

Comment intégrer désormais le décorateur ? 

Implémentez une solution complète intégrant le décorateur et proposez ce choix également à l'utilisateur.