From 2c457f9c05ccbdf384abac90077fe7d6e609d762 Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Sat, 10 Oct 2020 15:20:19 +0200 Subject: [PATCH] Add dynamic loading of pizza classes (NY style) --- src/pizzeria/NYPizzaStore.java | 29 +++++++++++++++++++---------- src/pizzeria/nypizza.properties | 5 +++++ 2 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 src/pizzeria/nypizza.properties diff --git a/src/pizzeria/NYPizzaStore.java b/src/pizzeria/NYPizzaStore.java index 9c940c8..f3480ec 100644 --- a/src/pizzeria/NYPizzaStore.java +++ b/src/pizzeria/NYPizzaStore.java @@ -1,17 +1,26 @@ package pizzeria; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.Properties; + public class NYPizzaStore extends PizzaStore { Pizza createPizza(String item) { - if (item.equals("cheese")) { - return new NYStyleCheesePizza(); - } else if (item.equals("veggie")) { - return new NYStyleVeggiePizza(); - } else if (item.equals("clam")) { - return new NYStyleClamPizza(); - } else if (item.equals("pepperoni")) { - return new NYStylePepperoniPizza(); - } else return null; + Pizza pizza = null; + + Properties properties = new Properties(); + try { + properties.load(this.getClass().getResourceAsStream("nypizza.properties")); + String pizzaName = properties.getProperty(item); + Class<?> classOfPizza = Class.forName(pizzaName); + Constructor<Pizza> constructor = (Constructor<Pizza>) classOfPizza.getConstructor(new Class[]{}); + pizza = constructor.newInstance(); + } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException | + NoSuchMethodException | InvocationTargetException e) { + e.printStackTrace(); + } + return pizza; } - } diff --git a/src/pizzeria/nypizza.properties b/src/pizzeria/nypizza.properties new file mode 100644 index 0000000..ff37049 --- /dev/null +++ b/src/pizzeria/nypizza.properties @@ -0,0 +1,5 @@ +cheese=pizzeria.NYStyleCheesePizza +clam=pizzeria.NYStyleClamPizza +pepperoni=pizzeria.NYStylePepperoniPizza +veggie=pizzeria.NYStyleVeggiePizza +salami=pizzeria.NYStyleSalamiPizza -- GitLab