UsedCarDealer exposes a CarIterator so client code can traverse cars without depending on the dealer's internal collection.
classDiagram
direction LR
class UsedCarDealerAggregate {
<<interface>>
+createIterator() CarIterator
}
class UsedCarDealer
class CarIterator {
<<interface>>
+hasNext() boolean
+next() Car
}
class UsedCarDealerIterator
class Car
class Main
UsedCarDealerAggregate <|.. UsedCarDealer
CarIterator <|.. UsedCarDealerIterator
UsedCarDealer o-- Car : inventory
UsedCarDealer --> UsedCarDealerIterator : creates
UsedCarDealerIterator --> Car : returns current
Main --> CarIterator : traverses