@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