visitor.txt 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. @startuml
  2. /' VISITOR '/
  3. class Client
  4. interface Visitor {
  5. # visitElementA(in a :ConcreteElementA)
  6. # visitElementB(in b :ConcreteElementB)
  7. }
  8. class ConcreteVisitor1 {
  9. + visitElementA(in a :ConcreteElementA)
  10. + visitElementB(in b :ConcreteElementB)
  11. }
  12. class ConcreteVisitor2 {
  13. + visitElementA(in a :ConcreteElementA)
  14. + visitElementB(in b :ConcreteElementB)
  15. }
  16. interface Element {
  17. # accept(in v : Visitor)
  18. }
  19. class ConcreteElementA {
  20. - private_data
  21. + accept(in v : Visitor)
  22. + getData()
  23. }
  24. class ConcreteElementB {
  25. - private_data
  26. + accept(in v : Visitor)
  27. + getData()
  28. }
  29. Visitor <- Client
  30. Visitor <|-- ConcreteVisitor1
  31. Visitor <|-- ConcreteVisitor2
  32. Client --> Element
  33. Element <|-- ConcreteElementA
  34. Element <|-- ConcreteElementB
  35. note as N1
  36. <b><color:royalBlue>Visitor</color></b>
  37. <b>Type:</b> Behavioral
  38. Représente une opération à réaliser
  39. par item de la structure de l'objet.
  40. Permet de définir une nouvelle opération
  41. sans changer de classe d'élément pour
  42. laquelle elle interagit.
  43. end note
  44. @enduml