@startuml Director *-> Builder Builder <|-- ConcreteBuilder ConcreteBuilder .> Product Director <-- Client Client -> ConcreteBuilder class Director { +Director(Builder&) +Construct() } interface Builder { {abstract} +BuildPartA() +BuildPartB() } class ConcreteBuilder { +BuildPartA() +BuildPartB() +GetProduct() : Product } hide empty attributes hide empty methods @enduml