Le patron de conception Etat

1 605 vues

Publié le

Présentation rapide du patron Etat [Gamma 95].

  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Le patron de conception Etat

  1. 1. Le patron de conception État [Gamma 95] Gerson Sunyé — Université de Nantes http://sunye.free.fr
  2. 2. Plan • • Un exemple d’utilisation La définition du patron Gerson Sunyé — Université de Nantes
  3. 3. Un exemple
  4. 4. Implémentation de TCP/IP TCP/IP status : String open()
 close() send() acknowledge() synchronize() TCP/IP::send(s : Stream) { if state = ‘open’ { (…) } ! if state = ‘closed’ { (…) } ! if state = ‘idle’ { (…) } } Gerson Sunyé — Université de Nantes
  5. 5. Problème • Comment éviter que l’état de la connexion soit vérifié à chaque fois qu’un paquet est envoyé? Gerson Sunyé — Université de Nantes
  6. 6. Solution • Isoler les comportements dépendants des différents états de connexion dans des classes différentes. Gerson Sunyé — Université de Nantes
  7. 7. En d’autres termes: status TCP/IP TCP/IP State open() open()
 close() send() acknowledge() synchronize() Idle open() Open open() Gerson Sunyé — Université de Nantes Close open()
  8. 8. Exemple de connexion 1 - open() 2 - open() : TCP/IP TCP/IP::open() { this.status.open(); } Gerson Sunyé — Université de Nantes : Close
  9. 9. Exemple de connexion 3 - delete link : TCP/IP : Close 4 - new link : Open Gerson Sunyé — Université de Nantes
  10. 10. Conséquences • Chaque instance de la classe “TCP/IP” est associée à une instance d’une sous-classe de “TCP/IP State”. • La vérification de l’état n’est plus nécessaire. Gerson Sunyé — Université de Nantes
  11. 11. Observations • Cette solution est utilisée dans la plupart des implémentations du protocole TCP/IP sur Unix. • Une solution similaire est utilisée dans plusieurs éditeurs graphiques (comportement d’un outil selon le type de figure sélectionnée). Gerson Sunyé — Université de Nantes
  12. 12. Le patron État
  13. 13. Nom • State (État). • Alias: Objects for States, Enveloppe-Letter. Gerson Sunyé — Université de Nantes
  14. 14. Problème • Comment traiter un objet dont le comportement est fortement dépendant de son état, sans vérifier, à chaque appel d’une opération, l’état actuel? Gerson Sunyé — Université de Nantes
  15. 15. Contexte • Le comportement d’un objet dépend de son état. • Différentes opérations contiennent des opérateurs conditionnels sur l’état de l’objet. Gerson Sunyé — Université de Nantes
  16. 16. Solution (1/2) /Context /request() * 1 /State /handle() * /ConcreteState * /handle() * Gerson Sunyé — Université de Nantes
  17. 17. Solution (2/2) TCP/IP TCP/IP State open() open() context : State  state Open concrete state open() Gerson Sunyé — Université de Nantes Close open()
  18. 18. Conséquences • Le comportement spécifique à un état est isolé. • Les transitions d’état sont explicites. • Les objets-états peuvent être partagés. Gerson Sunyé — Université de Nantes
  19. 19. Compromis d’implémentation • Qui définit les transitions d’état? • Création et destruction des états. • Utilisation de l’héritage dynamique. Gerson Sunyé — Université de Nantes

×