@startuml Container <|- ConcreteContainer Iterator <|- ConcreteIterator ConcreteContainer ..> ConcreteIterator ConcreteContainer <-- ConcreteIterator interface Container { {abstract} +CreateIterator() : Iterator* } interface Iterator { {abstract} +First() {abstract} +Next() {abstract} +Done() {abstract} +CurrentItem() } class ConcreteContainer { +CreateIterator() : ConcreteIterator* } hide empty attributes hide empty methods @enduml