@startuml /' VISITOR '/ class Client interface Visitor { # visitElementA(in a :ConcreteElementA) # visitElementB(in b :ConcreteElementB) } class ConcreteVisitor1 { + visitElementA(in a :ConcreteElementA) + visitElementB(in b :ConcreteElementB) } class ConcreteVisitor2 { + visitElementA(in a :ConcreteElementA) + visitElementB(in b :ConcreteElementB) } interface Element { # accept(in v : Visitor) } class ConcreteElementA { - private_data + accept(in v : Visitor) + getData() } class ConcreteElementB { - private_data + accept(in v : Visitor) + getData() } Visitor <- Client Visitor <|-- ConcreteVisitor1 Visitor <|-- ConcreteVisitor2 Client --> Element Element <|-- ConcreteElementA Element <|-- ConcreteElementB note as N1 Visitor Type: Behavioral Représente une opération à réaliser par item de la structure de l'objet. Permet de définir une nouvelle opération sans changer de classe d'élément pour laquelle elle interagit. end note @enduml