Les patrons de comportement
Les onze patrons de comportement du catalogue GoF : Chaîne de responsabilité, Commande, Interpréteur, Itérateur, Médiateur, Mémento, Observateur, État, Stratégie, Patron de méthode et Visiteur. Intention, participants et exemples de code.
- 33 cartes
- 3 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
Quelques cartes du deck
Chaîne de responsabilité : de quoi s'agit-il ?
Voir la réponse
Patron de comportement qui fait passer une demande le long d'une suite de maillons, jusqu'à ce que l'un d'eux la traite.
L'émetteur ne sait pas qui répondra. Chaque maillon traite la demande ou la passe au suivant, comme une demande de remboursement qui monte de valideur en valideur.
Qu'affiche ce programme ?
```python
class Sujet:
def __init__(self):
self.abonnes = []
def notifier(self, msg):
for a in list(self.abonnes):
a(msg)
s = Sujet()
a = lambda m: print("A", m)
b = lambda m: print("B", m)
s.abonnes += [a, b]
s.notifier("un")
s.abonnes.remove(a)
s.notifier("deux")`A un,B un,B deuxA un,B un,A deuxA un,B un,A deux,B deuxB un,A un,B deux
Voir la réponse
A un,B un,B deuxLe premier appel prévient les abonnés dans l'ordre d'inscription, A puis B. Après le retrait de A, seul B est prévenu pour « deux ». Sortie exécutée sous Python.
Dans l'Observateur, le … garde la liste de ses abonnés et appelle leur méthode de mise à jour à chaque changement d'état.
Voir la réponse
Dans l'Observateur, le sujet garde la liste de ses abonnés et appelle leur méthode de mise à jour à chaque changement d'état.
Le sujet ne connaît ses abonnés que par une interface : on peut en ajouter ou en retirer sans toucher à son code.
Commande : de quoi s'agit-il ?
Voir la réponse
Patron de comportement qui transforme une demande en objet, pour pouvoir la stocker, la mettre en file, l'annuler ou la rejouer.
L'objet commande porte l'action et ses paramètres, avec souvent
executer()etannuler(). Une pile de commandes donne l'historique d'un éditeur et son annulation.Quel valideur approuve une demande de 800 euros ?
```python
class Valideur:
def __init__(self, nom, plafond, suivant=None):
self.nom, self.plafond, self.suivant = nom, plafond, suivant
def traiter(self, montant):
if montant <= self.plafond:
return self.nom
return self.suivant.traiter(montant)
chaine = Valideur("chef", 500, Valideur("directeur", 2000, Valideur("PDG", 10000)))
print(chaine.traiter(800))`chefdirecteurPDGchefpuisdirecteur
Voir la réponse
directeur800 dépasse le plafond du chef (500) : la demande passe au maillon suivant, le directeur (2000), qui la traite et arrête la chaîne. Le PDG n'est jamais appelé.