@startuml
/' ITERATOR '/



class Client

interface Aggregate {
    # createIterator()
}

class ConcreteAggregate {
    + createIterator() : Context
    + getItem() : Int
    + getSize(): Uint
    + addItem() : Context
}

interface Iterator {
    # next() : Context
    # first() : Context
    # isDone() : Bool
    # currentItem() : Context
}

class ConcreteIterator {
    + next() : Context
    + first() : Context
    + isDone() : Bool
    + currentItem() : Context
}

hide empty members

Client --> Aggregate
Client --> Iterator
Aggregate <|-- ConcreteAggregate
Iterator <|-- ConcreteIterator

note as N1
    <b><color:royalBlue>Iterator</color></b>
    <b>Type:</b> Behavioral
    Permet d'accéder aux données d'un agrégat
    de manière séquentielle sans avoir 
    à connaitre la structure de données de l'objet.
end note
@enduml