@startuml

interface Iterator {
    __
    {abstract} next
    {abstract} hasNext
}
interface Aggregate {
    __
    {abstract} iterator
}
class ConcreteAggregate {
    __
    iterator
}
class ConcreteIterator {
    aggregate
    __
    next
    hasNext
}

Iterator <|.. ConcreteIterator
Aggregate <|.. ConcreteAggregate

Iterator <-- Aggregate : Creates
ConcreteAggregate <--o ConcreteIterator

@enduml