@startuml
'https://plantuml.com/class-diagram

abstract class  Pizza {
 +  name: String
 +  dough: String
 +  sauce: String
 +  toppings: List

 + getName(): String
 + prepare(): void
 + bake(): void
 + cut(): void
 + box(): void
}

class NYStyleCheesePizza
class NYStyleClamPizza
Pizza <|-up- NYStyleCheesePizza
Pizza <|-up- NYStyleClamPizza

class ChicagoStyleCheesePizza
class ChicagoStyleClamPizza
Pizza <|-up- ChicagoStyleCheesePizza
Pizza <|-up- ChicagoStyleClamPizza

abstract class PizzaStore {
 + {abstract} createPizza(item: String): Pizza
 +  orderPizza(type: String): Pizza
}

class NYPizzaStore{
 + createPizza(item: String): Pizza
}

class ChicagoPizzaStore{
 + createPizza(item: String): Pizza
}
PizzaStore <|-- NYPizzaStore
PizzaStore <|-- ChicagoPizzaStore

NYPizzaStore --> NYStyleCheesePizza
NYPizzaStore --> NYStyleClamPizza
ChicagoPizzaStore --> ChicagoStyleCheesePizza
ChicagoPizzaStore --> ChicagoStyleClamPizza
@enduml