From 7c0cb85632570a8894db1dab08a1937d11cb7925 Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Fri, 9 Oct 2020 21:28:54 +0200
Subject: [PATCH] Add factory method for pattern

---
 src/pizzeria/ChicagoPizzaFactory.java        | 21 ----------
 src/pizzeria/ChicagoPizzaStore.java          | 28 ++++++-------
 src/pizzeria/ChicagoStyleCheesePizza.java    |  2 +-
 src/pizzeria/ChicagoStyleClamPizza.java      |  2 +-
 src/pizzeria/ChicagoStylePepperoniPizza.java |  2 +-
 src/pizzeria/ChicagoStyleVeggiePizza.java    |  2 +-
 src/pizzeria/NYPizzaFactory.java             | 21 ----------
 src/pizzeria/NYPizzaStore.java               | 35 ++++++-----------
 src/pizzeria/Pizza.java                      | 41 ++++++++++++--------
 src/pizzeria/PizzaStore.java                 | 16 ++++++++
 src/pizzeria/PizzaTestDrive.java             | 32 ++++++++++-----
 11 files changed, 90 insertions(+), 112 deletions(-)
 delete mode 100644 src/pizzeria/ChicagoPizzaFactory.java
 delete mode 100644 src/pizzeria/NYPizzaFactory.java
 create mode 100644 src/pizzeria/PizzaStore.java

diff --git a/src/pizzeria/ChicagoPizzaFactory.java b/src/pizzeria/ChicagoPizzaFactory.java
deleted file mode 100644
index 7ec9648..0000000
--- a/src/pizzeria/ChicagoPizzaFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package pizzeria;
-
-public class ChicagoPizzaFactory {
-
-	public Pizza createPizza(String type) {
-		Pizza pizza = null;
-
-		if (type.equals("cheese")) {
-			pizza = new ChicagoStyleCheesePizza();
-		} else if (type.equals("pepperoni")) {
-			pizza = new ChicagoStylePepperoniPizza();
-		} else if (type.equals("clam")) {
-			pizza = new ChicagoStyleClamPizza();
-		} else if (type.equals("veggie")) {
-			pizza = new ChicagoStyleVeggiePizza();
-		}
-		return pizza;
-	}
-
-}
-
diff --git a/src/pizzeria/ChicagoPizzaStore.java b/src/pizzeria/ChicagoPizzaStore.java
index 2288121..22851d2 100644
--- a/src/pizzeria/ChicagoPizzaStore.java
+++ b/src/pizzeria/ChicagoPizzaStore.java
@@ -1,22 +1,16 @@
 package pizzeria;
 
-public class ChicagoPizzaStore {
-	ChicagoPizzaFactory factory;
- 
-	public ChicagoPizzaStore(ChicagoPizzaFactory factory) {
-		this.factory = factory;
-	}
- 
-	public Pizza orderPizza(String type) {
-		Pizza pizza;
- 
-		pizza = factory.createPizza(type);
- 
-		pizza.prepare();
-		pizza.bake();
-		//pizza.cut();
-		pizza.box();
+public class ChicagoPizzaStore extends PizzaStore {
 
-		return pizza;
+	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;
 	}
 }
diff --git a/src/pizzeria/ChicagoStyleCheesePizza.java b/src/pizzeria/ChicagoStyleCheesePizza.java
index 9708ec5..83b26ee 100644
--- a/src/pizzeria/ChicagoStyleCheesePizza.java
+++ b/src/pizzeria/ChicagoStyleCheesePizza.java
@@ -10,7 +10,7 @@ public class ChicagoStyleCheesePizza extends Pizza {
 		toppings.add("Shredded Mozzarella Cheese");
 	}
  
-	public void cut() {
+	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
 }
diff --git a/src/pizzeria/ChicagoStyleClamPizza.java b/src/pizzeria/ChicagoStyleClamPizza.java
index 2216bbe..9999b8b 100644
--- a/src/pizzeria/ChicagoStyleClamPizza.java
+++ b/src/pizzeria/ChicagoStyleClamPizza.java
@@ -10,7 +10,7 @@ public class ChicagoStyleClamPizza extends Pizza {
 		toppings.add("Frozen Clams from Chesapeake Bay");
 	}
  
-	public void cut() {
+	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
 }
diff --git a/src/pizzeria/ChicagoStylePepperoniPizza.java b/src/pizzeria/ChicagoStylePepperoniPizza.java
index 4618e68..ad85beb 100644
--- a/src/pizzeria/ChicagoStylePepperoniPizza.java
+++ b/src/pizzeria/ChicagoStylePepperoniPizza.java
@@ -13,7 +13,7 @@ public class ChicagoStylePepperoniPizza extends Pizza {
 		toppings.add("Sliced Pepperoni");
 	}
  
-	public void cut() {
+	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
 }
diff --git a/src/pizzeria/ChicagoStyleVeggiePizza.java b/src/pizzeria/ChicagoStyleVeggiePizza.java
index 9f22708..52f5968 100644
--- a/src/pizzeria/ChicagoStyleVeggiePizza.java
+++ b/src/pizzeria/ChicagoStyleVeggiePizza.java
@@ -12,7 +12,7 @@ public class ChicagoStyleVeggiePizza extends Pizza {
 		toppings.add("Eggplant");
 	}
  
-	public void cut() {
+	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
 }
diff --git a/src/pizzeria/NYPizzaFactory.java b/src/pizzeria/NYPizzaFactory.java
deleted file mode 100644
index 6d6402a..0000000
--- a/src/pizzeria/NYPizzaFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package pizzeria;
-
-public class NYPizzaFactory {
-
-	public Pizza createPizza(String type) {
-		Pizza pizza = null;
-
-		if (type.equals("cheese")) {
-			pizza = new NYStyleCheesePizza();
-		} else if (type.equals("pepperoni")) {
-			pizza = new NYStylePepperoniPizza();
-		} else if (type.equals("clam")) {
-			pizza = new NYStyleClamPizza();
-		} else if (type.equals("veggie")) {
-			pizza = new NYStyleVeggiePizza();
-		}
-		return pizza;
-	}
-
-}
-
diff --git a/src/pizzeria/NYPizzaStore.java b/src/pizzeria/NYPizzaStore.java
index 6b4ce8a..9c940c8 100644
--- a/src/pizzeria/NYPizzaStore.java
+++ b/src/pizzeria/NYPizzaStore.java
@@ -1,28 +1,17 @@
 package pizzeria;
 
-public class NYPizzaStore {
-	NYPizzaFactory factory;
- 
-	public NYPizzaStore(NYPizzaFactory factory) { 
-		this.factory = factory;
-	}
- 
-	public Pizza orderPizza(String type) {
-		Pizza pizza;
- 
-		pizza = factory.createPizza(type);
- 
-		pizza.prepare();
-		pizza.bake();
-		pizza.cut();
-		//pizza.box();
-		nyBox(pizza);
-		
-		return pizza;
-	}
-	
-	public void nyBox(Pizza pizza) {
-		System.out.println("NY style boxing " + pizza.name);
+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;
 	}
 	
 }
diff --git a/src/pizzeria/Pizza.java b/src/pizzeria/Pizza.java
index 1d25eb2..65e3e4c 100644
--- a/src/pizzeria/Pizza.java
+++ b/src/pizzeria/Pizza.java
@@ -2,34 +2,39 @@ package pizzeria;
 
 import java.util.ArrayList;
 
-abstract public class Pizza {
+public abstract class Pizza {
 	String name;
 	String dough;
 	String sauce;
 	ArrayList<String> toppings = new ArrayList<String>();
-
-	public String getName() {
-		return name;
-	}
-
-	public void prepare() {
+ 
+	void prepare() {
 		System.out.println("Preparing " + name);
+		System.out.println("Tossing dough...");
+		System.out.println("Adding sauce...");
+		System.out.println("Adding toppings: ");
+		for (int i = 0; i < toppings.size(); i++) {
+			System.out.println("   " + toppings.get(i));
+		}
 	}
-
-	public void bake() {
-		System.out.println("Baking " + name);
+  
+	void bake() {
+		System.out.println("Bake for 25 minutes at 350");
 	}
-
-	public void cut() {
-		System.out.println("Cutting " + name);
+ 
+	void cut() {
+		System.out.println("Cutting the pizza into diagonal slices");
 	}
-
-	public void box() {
-		System.out.println("Boxing " + name);
+  
+	void box() {
+		System.out.println("Place pizza in official PizzaStore box");
+	}
+ 
+	public String getName() {
+		return name;
 	}
 
 	public String toString() {
-		// code to display pizza name and ingredients
 		StringBuffer display = new StringBuffer();
 		display.append("---- " + name + " ----\n");
 		display.append(dough + "\n");
@@ -41,3 +46,5 @@ abstract public class Pizza {
 	}
 }
 
+ 
+ 
diff --git a/src/pizzeria/PizzaStore.java b/src/pizzeria/PizzaStore.java
new file mode 100644
index 0000000..38b89ec
--- /dev/null
+++ b/src/pizzeria/PizzaStore.java
@@ -0,0 +1,16 @@
+package pizzeria;
+
+public abstract class PizzaStore {
+ 
+	abstract Pizza createPizza(String item);
+ 
+	public final Pizza orderPizza(String type) {
+		Pizza pizza = createPizza(type);
+		System.out.println("--- Making a " + pizza.getName() + " ---");
+		pizza.prepare();
+		pizza.bake();
+		pizza.cut();
+		pizza.box();
+		return pizza;
+	}
+}
diff --git a/src/pizzeria/PizzaTestDrive.java b/src/pizzeria/PizzaTestDrive.java
index 23bb505..a4ce31a 100644
--- a/src/pizzeria/PizzaTestDrive.java
+++ b/src/pizzeria/PizzaTestDrive.java
@@ -3,17 +3,31 @@ package pizzeria;
 public class PizzaTestDrive {
  
 	public static void main(String[] args) {
-		NYPizzaFactory nyFactory = new NYPizzaFactory();
-		NYPizzaStore nyStore = new NYPizzaStore(nyFactory);
-
+		PizzaStore nyStore = new NYPizzaStore();
+		PizzaStore chicagoStore = new ChicagoPizzaStore();
+ 
 		Pizza pizza = nyStore.orderPizza("cheese");
-		System.out.println("We ordered a " + pizza.getName() + "\n");
+		System.out.println("Ethan ordered a " + pizza.getName() + "\n");
  
-		ChicagoPizzaFactory chicagoFactory = new ChicagoPizzaFactory();
-		ChicagoPizzaStore chicagoStore = new ChicagoPizzaStore(chicagoFactory);
-		
-		pizza = chicagoStore.orderPizza("veggie");
-		System.out.println("We ordered a " + pizza.getName() + "\n");
+		pizza = chicagoStore.orderPizza("cheese");
+		System.out.println("Joel ordered a " + pizza.getName() + "\n");
+
+		pizza = nyStore.orderPizza("clam");
+		System.out.println("Ethan ordered a " + pizza.getName() + "\n");
+ 
+		pizza = chicagoStore.orderPizza("clam");
+		System.out.println("Joel ordered a " + pizza.getName() + "\n");
 
+		pizza = nyStore.orderPizza("pepperoni");
+		System.out.println("Ethan ordered a " + pizza.getName() + "\n");
+ 
+		pizza = chicagoStore.orderPizza("pepperoni");
+		System.out.println("Joel ordered a " + pizza.getName() + "\n");
+
+		pizza = nyStore.orderPizza("veggie");
+		System.out.println("Ethan ordered a " + pizza.getName() + "\n");
+ 
+		pizza = chicagoStore.orderPizza("veggie");
+		System.out.println("Joel ordered a " + pizza.getName() + "\n");
 	}
 }
-- 
GitLab