Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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, ...) et playSound("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 ButtonBuyArrows qui 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.