Episode 2
Design pattern comportemental qui est utilisé pour définir la structure d'un algorithme dans une méthode, tout en déléguant certaines étapes spécifiques aux sous-classes.
L'idée est de permettre la réutilisation du squelette de l'algorithme tout en laissant aux sous-classes la possibilité de redéfinir certaines étapes spécifiques sans changer la structure globale.
Admettons que l'on souhaite fabriquer des Burgers
La création d'un burger suit plusieurs étapes
Comment gérer les différents types de burger (Boeuf, Poulet, Veggie, etc...) ?
Tout d'abord on encapsule chaque étape du processus dans une méthode.
Ensuite on crée une méthode parente (la template method), qui va appeller toutes les étapes dans l'ordre qui nous intéresse.
Les étapes du processus qui varient d'un burger à l'autre seront placées dans des méthodes abstraites
Ce sera alors, la responsabilité de la classe enfant d'implémenter la logique de cette étape spécifique.
Par ex : ici ce sera l'ajout de l'ingrédient principal qui changera d'un burger à l'autre (Boeuf, Poulet, Veggie, etc...)
Il faut créer une classe enfant pour chaque burger différent qui héritera de la classe parent.
Cette classe aura la responsabilité d'implémenter la logique de son étape spécifique
Big Mac burger
Veggie Big Mac burger
Tous les objets sont crées selon le même processus d'étapes
La diversité est facilement gérée via l'héritage et l'abstraction
Facile d'ajouter une nouvelle étape commune à tous les burgers (Ajout ingrédients supplémentaires comme la tomate ou la salade)
Repo Github : https://github.com/codingstuff91/Laravel-design-patterns
Refactoring guru : https://refactoring.guru/fr/design-patterns/template-method