@startuml participant Client order 1 participant Director order 2 participant ConcreteBuilder order 3 activate Client Client -> ConcreteBuilder: ConcreteBuilder() activate ConcreteBuilder Client <-- ConcreteBuilder: aConcreteBuilder deactivate ConcreteBuilder Client -> Director: Director(aConcreteBuilder) activate Director Client <-- Director: aDirector deactivate Director Client -> Director: Construct() activate Director Director -> ConcreteBuilder: BuildPartA() activate ConcreteBuilder Director <-- ConcreteBuilder deactivate ConcreteBuilder Director -> ConcreteBuilder: BuildPartB() activate ConcreteBuilder Director <-- ConcreteBuilder deactivate ConcreteBuilder Client <-- Director deactivate Director Client -> ConcreteBuilder: GetProduct() activate ConcreteBuilder Client <-- ConcreteBuilder : aProduct deactivate ConcreteBuilder @enduml