Design patterns
Un design pattern désigne une astuce pour structurer du code correctement pour réaliser une certaine tâche.
Command
Pour implémenter annuler/refaire,
- https://github.com/tableaunoir/tableaunoir/blob/master/src/Operation.ts
- https://github.com/tableaunoir/tableaunoir/blob/master/src/OperationTranslate.ts
Itérateur
(déjà vu !)
Observateur
Le patron de conception observeur inverse les dépendances.
Exemple d’un logiciel qui visualise l’algorithme de Dijkstra
Idée ?
- A chaque étape de l’algorithme, dans le code de Dijkstra, vous mettez des lignes comme
drawGraph(G, ...)etplaySound("newVertexPopped.ogg"), etc.
Problème
Votre algorithme Dijkstra devient difficile à lire. Il est offusqué de ligne qui affiche, qui joue du son. Tout est mélangé avec le calcul effectif du plus court chemin.
Solution
- Parsemer votre algorithme de Dijkstra d’envoi de notifications “abstraites” comme
notifyNewVertexPopped,notifyDecreasedDistance, etc. Puis mettre en place un système d’inscription pour que les observateurs interessés recoivent les notifications. - Faire un observateur qui réaffiche le graphe avec les nouvelles données
- Faire un observateur qui joue les sons appropriés en fonction des bonnes notifications
Exemple avec un bouton
See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
Imaginer que vous développez un bouton “acheter des flèches pour votre arc” et quand on clique vous achetez des flèches pour votre arc, et ça fait un son “clic”.
Idée ?
- Vous pouvez faire une classe
ButtonBuyArrowsqui connaît le joueur, ses sous, a accès à la librairie pour faire du son.
Problème
Votre classe ButtonBuyArrows, et bien d’autres ButtonBuyHeart, ButtonQuit doivent connaître trop d’éléments de votre jeu.
Solution
On inverse les dépendances.
- C’est la gestion de son qui connaît les boutons et qui vient “observer” quand quelqu’un clique sur le bouton, et vient faire “clic”.
- C’est le “contrôleur” qui connait l’interface graphique et donc les boutons, et l’état du jeu, qui écoute si le joueur clique sur le bouton.
Singleton
Faire qu’une classe ne peut qu’avoir une seule instance.