@startuml
skinparam class {
    BackgroundColor lightyellow
    BorderColor black
    ArrowColor black
}

class PizzaTypeSummary {
-typeName: String
-numberOfOrders: int
-numberOfPizzas: int
-summaryPrice: int
+PizzaTypeSummary(int numberOfPizzas, String typeName, int summaryPrice, int numberOfOrders): Constructor
+getNumberOfOrders(): int
+getTypeName(): String
+setSummaryPrice(int summaryPrice): void
+getNumberOfPizzas(): int
+setNumberOfPizzas(int numberOfPizzas): void
+getSummaryPrice(): int
+toString(): String
+setTypeName(String typeName): void
+setNumberOfOrders(int numberOfOrders): void
}

interface PizzariaEngineInterface {
~addOrder(int qty, String type): boolean
~produceReport(): List[String]
~produceSummaryReport(): Collection[PizzaTypeSummaryInterface]
}

class Order {
+UNIT_PRICE: int
-type: String
-quantity: int
+Order(int quantity, String type): Constructor
+getQuantity(): int
+getOrderPrice(): int
+getType(): String
}

class PizzariaEngine {
-allOrders: List[Order]
+PizzariaEngine(): Constructor
+produceReport(): List[String]
+produceSummaryReport(): Collection[PizzaTypeSummaryInterface]
+addOrder(int qty, String type): boolean
~getAllOrders(): List[Order]
}

interface PizzaTypeSummaryInterface {
~getSummaryPrice(): int
~getNumberOfPizzas(): int
~toString(): String
~getTypeName(): String
~getNumberOfOrders(): int
}

class ClientApp {
+main(String[] args): void
-addOrder(PizzariaEngineInterface engine, int qty, String type): void
}

class PizzariaEngineFactory {
+createPizzariaEngine(): PizzariaEngineInterface
}

PizzaTypeSummary ..|> PizzaTypeSummaryInterface
PizzariaEngineInterface ..> PizzaTypeSummaryInterface
PizzariaEngine ..> PizzaTypeSummary
PizzariaEngine o-- Order
PizzariaEngine ..|> PizzariaEngineInterface
PizzariaEngine ..> PizzaTypeSummaryInterface
ClientApp ..> PizzariaEngineInterface
PizzariaEngineFactory ..> PizzariaEngineInterface
PizzariaEngineFactory ..> PizzariaEngine
 @enduml