diff --git a/src/pizzeria/ChicagoPizzaRegistry.java b/src/pizzeria/ChicagoPizzaRegistry.java new file mode 100644 index 0000000000000000000000000000000000000000..a5f114c12d6c5e5d48c1e7ce4f5a84496da86963 --- /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 22851d20ad720363bd790d265d0729703347bec8..276ab6844c46a4c8ff9c760288eff0e91d55b074 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 83b26eebe88ed19448184b7fc665c7d9065b17b1..8095e9b391b13a047616579788bf9d089617bafb 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 9999b8bf74257ce5294df3359ff2731cdaf2b7b5..7a69c73888dfe1e3e3083039175bb66cad10ab13 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 ad85beb1bee8abb94a3bc0f7b3d7a6919dfe0d10..f7e98741b0e7ad89243c939f0badbba8c5cf4009 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 52f5968906f455201ea0f970904e7135b122f319..cfee2f93b957d24a797a21bdc4e91441e6401427 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 7ba90a6d0ef654777b95f5f111f128f4da8f37c2..ef9b82331ad49b1805239be4835a2a1749a81cdd 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 23935afcdb739e9fd445ea98bc7dafdc0618b8c5..ef38c36eec2948451637bca21274e6962537b019 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 66cde53bf5f64eba0fcdf9439661be79032fb7bb..533bb71f6657a3119a26d935b19d96717ffa26f3 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 cb66220bb3543eac70674d7c09377b60e8f3a795..b832894695f265cd372bc1b8957de6de30c2c7f5 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 65e3e4c86860c2ab1573faddba7184705dd92de0..bbf1652179281dcf32c2f4811a4c0025f1fb042a 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 a4ce31a7bbb9e7f5299dd3e91f3ebaab166606fa..8ee017be085f9f225d88cb3a579d8f5f28160b59 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();