Nous voilà avec plusieurs Design patterns déjà présentés, et pourtant nous n’avons pas réellement parlé de comment découpler la création de l’utilisation d’une classe.
Après le Design Pattern Composite, continuons notre aventure avec le Factory, ou Fabrique (en français).
Pour suivre le projet : le github.
Problématique
Plusieurs armes sont utilisées par les Wookies, par les Jedis, ou bien les StormTroopers. Elles respectent toutes la même interface.
Or, à chaque fois que nous les créons, nous appelons l’instancieur, sans se soucier de la dépendance entre le type de la variable et l’instanciation.
Comment faire si demain, au lieu d’appeler une arme avec pointeur laser, on appelle une arme avec double laser ?
Nous avons créé une dépendance, un fort couplage entre le type et son instance. Il nous faut nous en sortir.
Une première solution
C’est là que la Fabrique, la Factory, arrive.
Nous allons créer un Proxy entre la variable souhaitée et son instanciation : la Fabrique.
Nous aurons donc :
- Une Fabrique : GunFactory, qui sera une classe abstraite.
- Une interface IGun : pour proposer un contrat, et ne plus être dépendant des classes
- Des classes d’armes implémentant l’interface IGun.
Comment faire ?
Voici le diagramme de classe :
Voici la mise en place :
Une note
Plutôt que d’utiliser un switch pour choisir le type d’arme, essayez avec le Activator.CreateInstance.
Vous avez testé ?
D’autres patrons possibles
Nous découvrirons le DI (Injection de dépendance), encore plus évolutif.