Académique Documents
Professionnel Documents
Culture Documents
Notes de Cours
Conception avancée des logiciels
Cours 6
Design Patterns (suite)
(Patrons de conception)
Présenté par
Mr KHELIFA N.
Pattern commande
Supposons que vous construisez un système
domotique.
if (buttonPressed == button1)
lampe.marche()
if (buttonPressed == button2)
lampe.arret()
Problème
Soit les états d’un distributeur de bonbons, ou l’états « Pas de pièce » l’état initial du
distributeur et l’utilisateur pourrait faire quelque chose d’absurde, par exemple essayer
d’éjecter la pièce quand l’appareil est dans l’état « Pas de pièce » ou encore insérer deux
pièces.
Etat
Strategy
Problème
(i) définir une famille d’algorithmes,
(ii) encapsuler chacun et les rendre interchangeables tout en assurant que
chaque algorithme peut évoluer indépendamment des clients qui l’utilisent
- On souhaite que la sélection d’un algorithme dépende du client à
l’origine de la demande.
- Ce qui varie : l'algorithme implémentant un service.
Strategy
Fonctionnement
Désencapsuler les comportements de la classe mère de l’objet
Les déporter dans des classes liées, à l’aide d’une interface commune
Permettre au client d’utiliser une implémentation quelconque de cette
interface
Utiliser un contexte qui gère les changements d’implémentation
Exemple
Une application de jeu de simulation sur
les canards
Les canards nagent et crient: :
Solution
Visitor
Problème
Des opérations doivent être réalisées dans une structure d’objets comportant des
objets avec des interfaces différentes
Comment séparer un algorithme d'une structure de données. Un visiteur possède une
méthode par type d'objet traité.
La classe définissant la structure change rarement mais de nouvelles opérations
doivent pouvoir être définies souvent sur cette structure
Visitor
Fonctionnement
Ajout aux classes de fonctions « virtuelles » génériques qui
redirigent les opérations vers une classe spécifique « Visiteur »
Cette classe redirige les opérations vers les bonnes
implémentations
Patron visiteur
Pattern visiteur
Chaque classe pouvant être « visitée » doit mettre à disposition une
méthode publique « accepter » prenant comme argument un objet du
type « visiteur ».
Visitor : une interface qui déclare une opération accept() pour chaque classe ConcreteElement de la
structure d'objets. Le nom de l'opération et sa signature identifient la classe émettrice de la
requête accept() chez le visiteur. Le visiteur peut ensuite accéder à l'élément
directement, au travers de son interface particulière.
Element : une interface qui définit une opération accept() ayant pour argument un visiteur.