From 4c3002f2b068255120a82712f823326203714a96 Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Sat, 10 Oct 2020 15:29:57 +0200 Subject: [PATCH] Add registry for pizza Chicago style --- src/pizzeria/ChicagoPizzaRegistry.java | 24 ++++++++++++++++++++ src/pizzeria/ChicagoPizzaStore.java | 17 +++++++------- src/pizzeria/ChicagoStyleCheesePizza.java | 9 ++++++++ src/pizzeria/ChicagoStyleClamPizza.java | 9 ++++++++ src/pizzeria/ChicagoStylePepperoniPizza.java | 10 ++++++++ src/pizzeria/ChicagoStyleVeggiePizza.java | 11 +++++++++ src/pizzeria/NYStyleCheesePizza.java | 5 ++++ src/pizzeria/NYStyleClamPizza.java | 4 ++++ src/pizzeria/NYStylePepperoniPizza.java | 6 +++++ src/pizzeria/NYStyleVeggiePizza.java | 6 +++++ src/pizzeria/Pizza.java | 4 +++- src/pizzeria/PizzaTestDrive.java | 9 ++++++++ 12 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 src/pizzeria/ChicagoPizzaRegistry.java diff --git a/src/pizzeria/ChicagoPizzaRegistry.java b/src/pizzeria/ChicagoPizzaRegistry.java new file mode 100644 index 0000000..a5f114c --- /dev/null +++ b/src/pizzeria/ChicagoPizzaRegistry.java @@ -0,0 +1,24 @@ +package pizzeria; + +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +public class ChicagoPizzaRegistry { + static List<Pizza> pizzaHandlers = new ArrayList<>(); + + static void register(Pizza pizza) { + pizzaHandlers.add(pizza); + } + + static Pizza getPizzaHandler(String type) { + ListIterator<Pizza> iter = pizzaHandlers.listIterator(); + while (iter.hasNext()) { + Pizza pizza = iter.next(); + if (pizza.canHandle(type)) { + return pizza; + } + } + return null; + } +} diff --git a/src/pizzeria/ChicagoPizzaStore.java b/src/pizzeria/ChicagoPizzaStore.java index 22851d2..276ab68 100644 --- a/src/pizzeria/ChicagoPizzaStore.java +++ b/src/pizzeria/ChicagoPizzaStore.java @@ -3,14 +3,13 @@ package pizzeria; public class ChicagoPizzaStore extends PizzaStore { Pizza createPizza(String item) { - if (item.equals("cheese")) { - return new ChicagoStyleCheesePizza(); - } else if (item.equals("veggie")) { - return new ChicagoStyleVeggiePizza(); - } else if (item.equals("clam")) { - return new ChicagoStyleClamPizza(); - } else if (item.equals("pepperoni")) { - return new ChicagoStylePepperoniPizza(); - } else return null; + Pizza pizza = null; + + pizza = ChicagoPizzaRegistry.getPizzaHandler(item); + if (pizza == null) { + System.out.println("Kein Handler gefunden"); + } + + return pizza; } } diff --git a/src/pizzeria/ChicagoStyleCheesePizza.java b/src/pizzeria/ChicagoStyleCheesePizza.java index 83b26ee..8095e9b 100644 --- a/src/pizzeria/ChicagoStyleCheesePizza.java +++ b/src/pizzeria/ChicagoStyleCheesePizza.java @@ -2,6 +2,10 @@ package pizzeria; public class ChicagoStyleCheesePizza extends Pizza { + static { + ChicagoPizzaRegistry.register(new ChicagoStyleCheesePizza()); + } + public ChicagoStyleCheesePizza() { name = "Chicago Style Deep Dish Cheese Pizza"; dough = "Extra Thick Crust Dough"; @@ -13,4 +17,9 @@ public class ChicagoStyleCheesePizza extends Pizza { void cut() { System.out.println("Cutting the pizza into square slices"); } + + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("cheese"); + } } diff --git a/src/pizzeria/ChicagoStyleClamPizza.java b/src/pizzeria/ChicagoStyleClamPizza.java index 9999b8b..7a69c73 100644 --- a/src/pizzeria/ChicagoStyleClamPizza.java +++ b/src/pizzeria/ChicagoStyleClamPizza.java @@ -1,6 +1,10 @@ package pizzeria; public class ChicagoStyleClamPizza extends Pizza { + static { + ChicagoPizzaRegistry.register(new ChicagoStyleClamPizza()); + } + public ChicagoStyleClamPizza() { name = "Chicago Style Clam Pizza"; dough = "Extra Thick Crust Dough"; @@ -13,4 +17,9 @@ public class ChicagoStyleClamPizza extends Pizza { void cut() { System.out.println("Cutting the pizza into square slices"); } + + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("clam"); + } } diff --git a/src/pizzeria/ChicagoStylePepperoniPizza.java b/src/pizzeria/ChicagoStylePepperoniPizza.java index ad85beb..f7e9874 100644 --- a/src/pizzeria/ChicagoStylePepperoniPizza.java +++ b/src/pizzeria/ChicagoStylePepperoniPizza.java @@ -1,6 +1,11 @@ package pizzeria; public class ChicagoStylePepperoniPizza extends Pizza { + + static { + ChicagoPizzaRegistry.register(new ChicagoStylePepperoniPizza()); + } + public ChicagoStylePepperoniPizza() { name = "Chicago Style Pepperoni Pizza"; dough = "Extra Thick Crust Dough"; @@ -16,4 +21,9 @@ public class ChicagoStylePepperoniPizza extends Pizza { void cut() { System.out.println("Cutting the pizza into square slices"); } + + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("pepperoni"); + } } diff --git a/src/pizzeria/ChicagoStyleVeggiePizza.java b/src/pizzeria/ChicagoStyleVeggiePizza.java index 52f5968..cfee2f9 100644 --- a/src/pizzeria/ChicagoStyleVeggiePizza.java +++ b/src/pizzeria/ChicagoStyleVeggiePizza.java @@ -1,6 +1,11 @@ package pizzeria; public class ChicagoStyleVeggiePizza extends Pizza { + + static { + ChicagoPizzaRegistry.register(new ChicagoStyleVeggiePizza()); + } + public ChicagoStyleVeggiePizza() { name = "Chicago Deep Dish Veggie Pizza"; dough = "Extra Thick Crust Dough"; @@ -15,4 +20,10 @@ public class ChicagoStyleVeggiePizza extends Pizza { void cut() { System.out.println("Cutting the pizza into square slices"); } + + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("veggie"); + } + } diff --git a/src/pizzeria/NYStyleCheesePizza.java b/src/pizzeria/NYStyleCheesePizza.java index 7ba90a6..ef9b823 100644 --- a/src/pizzeria/NYStyleCheesePizza.java +++ b/src/pizzeria/NYStyleCheesePizza.java @@ -9,4 +9,9 @@ public class NYStyleCheesePizza extends Pizza { toppings.add("Grated Reggiano Cheese"); } + + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("cheese"); + } } diff --git a/src/pizzeria/NYStyleClamPizza.java b/src/pizzeria/NYStyleClamPizza.java index 23935af..ef38c36 100644 --- a/src/pizzeria/NYStyleClamPizza.java +++ b/src/pizzeria/NYStyleClamPizza.java @@ -10,4 +10,8 @@ public class NYStyleClamPizza extends Pizza { toppings.add("Grated Reggiano Cheese"); toppings.add("Fresh Clams from Long Island Sound"); } + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("clam"); + } } diff --git a/src/pizzeria/NYStylePepperoniPizza.java b/src/pizzeria/NYStylePepperoniPizza.java index 66cde53..533bb71 100644 --- a/src/pizzeria/NYStylePepperoniPizza.java +++ b/src/pizzeria/NYStylePepperoniPizza.java @@ -14,4 +14,10 @@ public class NYStylePepperoniPizza extends Pizza { toppings.add("Mushrooms"); toppings.add("Red Pepper"); } + + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("pepperoni"); + } + } diff --git a/src/pizzeria/NYStyleVeggiePizza.java b/src/pizzeria/NYStyleVeggiePizza.java index cb66220..b832894 100644 --- a/src/pizzeria/NYStyleVeggiePizza.java +++ b/src/pizzeria/NYStyleVeggiePizza.java @@ -13,4 +13,10 @@ public class NYStyleVeggiePizza extends Pizza { toppings.add("Mushrooms"); toppings.add("Red Pepper"); } + + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("veggie"); + } + } diff --git a/src/pizzeria/Pizza.java b/src/pizzeria/Pizza.java index 65e3e4c..bbf1652 100644 --- a/src/pizzeria/Pizza.java +++ b/src/pizzeria/Pizza.java @@ -7,7 +7,9 @@ public abstract class Pizza { String dough; String sauce; ArrayList<String> toppings = new ArrayList<String>(); - + + public abstract Boolean canHandle(String type); + void prepare() { System.out.println("Preparing " + name); System.out.println("Tossing dough..."); diff --git a/src/pizzeria/PizzaTestDrive.java b/src/pizzeria/PizzaTestDrive.java index a4ce31a..8ee017b 100644 --- a/src/pizzeria/PizzaTestDrive.java +++ b/src/pizzeria/PizzaTestDrive.java @@ -3,6 +3,15 @@ package pizzeria; public class PizzaTestDrive { public static void main(String[] args) { + try { + Class.forName("pizzeria.ChicagoStyleCheesePizza"); + Class.forName("pizzeria.ChicagoStyleClamPizza"); + Class.forName("pizzeria.ChicagoStylePepperoniPizza"); + Class.forName("pizzeria.ChicagoStyleVeggiePizza"); + } catch (Exception e) { + e.printStackTrace(); + } + PizzaStore nyStore = new NYPizzaStore(); PizzaStore chicagoStore = new ChicagoPizzaStore(); -- GitLab