Skip to content
Snippets Groups Projects
Commit 9db3842c authored by Peter Hertkorn's avatar Peter Hertkorn
Browse files

Using abstract factory for pizza ingredients

parent 9f9d9bd1
No related branches found
No related tags found
No related merge requests found
Showing
with 239 additions and 177 deletions
package pizzeria.ingredients;
public class ChicagoPizzaIngredientFactory
implements PizzaIngredientFactory
{
public Dough createDough() {
return new ThickCrustDough();
}
public Sauce createSauce() {
return new PlumTomatoSauce();
}
public Cheese createCheese() {
return new MozzarellaCheese();
}
public Veggies[] createVeggies() {
Veggies veggies[] = { new BlackOlives(),
new Spinach(),
new Eggplant() };
return veggies;
}
public Pepperoni createPepperoni() {
return new SlicedPepperoni();
}
public Clams createClam() {
return new FrozenClams();
}
}
package pizzeria.ingredients;
public class NYPizzaIngredientFactory implements PizzaIngredientFactory {
public Dough createDough() {
return new ThinCrustDough();
}
public Sauce createSauce() {
return new MarinaraSauce();
}
public Cheese createCheese() {
return new ReggianoCheese();
}
public Veggies[] createVeggies() {
Veggies veggies[] = { new Garlic(), new Onion(), new Mushroom(), new RedPepper() };
return veggies;
}
public Pepperoni createPepperoni() {
return new SlicedPepperoni();
}
public Clams createClam() {
return new FreshClams();
}
}
package pizzeria.ingredients;
public interface PizzaIngredientFactory {
public Dough createDough();
public Sauce createSauce();
public Cheese createCheese();
public Veggies[] createVeggies();
public Pepperoni createPepperoni();
public Clams createClam();
}
package pizzeria.pizza;
import pizzeria.ingredients.PizzaIngredientFactory;
public class CheesePizza extends Pizza {
public CheesePizza(PizzaIngredientFactory ingredientFactory) {
this.ingredientFactory = ingredientFactory;
}
public void prepare() {
System.out.println("Preparing " + name);
dough = ingredientFactory.createDough();
sauce = ingredientFactory.createSauce();
cheese = ingredientFactory.createCheese();
}
}
package pizzeria.pizza;
public class ChicagoStyleCheesePizza extends Pizza {
public ChicagoStyleCheesePizza() {
name = "Chicago Style Deep Dish Cheese Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Mozzarella Cheese");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
package pizzeria.pizza;
public class ChicagoStyleClamPizza extends Pizza {
public ChicagoStyleClamPizza() {
name = "Chicago Style Clam Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Mozzarella Cheese");
toppings.add("Frozen Clams from Chesapeake Bay");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
package pizzeria.pizza;
public class ChicagoStylePepperoniPizza extends Pizza {
public ChicagoStylePepperoniPizza() {
name = "Chicago Style Pepperoni Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Mozzarella Cheese");
toppings.add("Black Olives");
toppings.add("Spinach");
toppings.add("Eggplant");
toppings.add("Sliced Pepperoni");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
package pizzeria.pizza;
public class ChicagoStyleVeggiePizza extends Pizza {
public ChicagoStyleVeggiePizza() {
name = "Chicago Deep Dish Veggie Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Mozzarella Cheese");
toppings.add("Black Olives");
toppings.add("Spinach");
toppings.add("Eggplant");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
package pizzeria.pizza;
import pizzeria.ingredients.PizzaIngredientFactory;
public class ClamPizza extends Pizza {
public ClamPizza(PizzaIngredientFactory ingredientFactory) {
this.ingredientFactory = ingredientFactory;
}
public void prepare() {
System.out.println("Preparing " + name);
dough = ingredientFactory.createDough();
sauce = ingredientFactory.createSauce();
cheese = ingredientFactory.createCheese();
clam = ingredientFactory.createClam();
}
}
package pizzeria.pizza;
public class NYStyleCheesePizza extends Pizza {
public NYStyleCheesePizza() {
name = "NY Style Sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Reggiano Cheese");
}
}
package pizzeria.pizza;
public class NYStyleClamPizza extends Pizza {
public NYStyleClamPizza() {
name = "NY Style Clam Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Reggiano Cheese");
toppings.add("Fresh Clams from Long Island Sound");
}
}
package pizzeria.pizza;
public class NYStylePepperoniPizza extends Pizza {
public NYStylePepperoniPizza() {
name = "NY Style Pepperoni Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Reggiano Cheese");
toppings.add("Sliced Pepperoni");
toppings.add("Garlic");
toppings.add("Onion");
toppings.add("Mushrooms");
toppings.add("Red Pepper");
}
}
package pizzeria.pizza;
public class NYStyleVeggiePizza extends Pizza {
public NYStyleVeggiePizza() {
name = "NY Style Veggie Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Reggiano Cheese");
toppings.add("Garlic");
toppings.add("Onion");
toppings.add("Mushrooms");
toppings.add("Red Pepper");
}
}
package pizzeria.ingredients; package pizzeria.pizza;
import pizzeria.ingredients.PizzaIngredientFactory;
public class PepperoniPizza extends Pizza { public class PepperoniPizza extends Pizza {
...@@ -6,7 +8,7 @@ public class PepperoniPizza extends Pizza { ...@@ -6,7 +8,7 @@ public class PepperoniPizza extends Pizza {
this.ingredientFactory = ingredientFactory; this.ingredientFactory = ingredientFactory;
} }
void prepare() { public void prepare() {
System.out.println("Preparing " + name); System.out.println("Preparing " + name);
dough = ingredientFactory.createDough(); dough = ingredientFactory.createDough();
sauce = ingredientFactory.createSauce(); sauce = ingredientFactory.createSauce();
......
package pizzeria.pizza; package pizzeria.pizza;
import java.util.ArrayList; import pizzeria.ingredients.PizzaIngredientFactory;
import pizzeria.ingredients.*;
public abstract class Pizza { public abstract class Pizza {
PizzaIngredientFactory ingredientFactory;
String name; String name;
String dough;
String sauce; Dough dough;
ArrayList<String> toppings = new ArrayList<String>(); Sauce sauce;
Veggies veggies[];
public void prepare() { Cheese cheese;
System.out.println("Preparing " + name); Pepperoni pepperoni;
System.out.println("Tossing dough..."); Clams clam;
System.out.println("Adding sauce...");
System.out.println("Adding toppings: "); public abstract void prepare();
for (int i = 0; i < toppings.size(); i++) {
System.out.println(" " + toppings.get(i));
}
}
public void bake() { public void bake() {
System.out.println("Bake for 25 minutes at 350"); System.out.println("Bake for 25 minutes at 350");
} }
public void cut() { public void cut() {
System.out.println("Cutting the pizza into diagonal slices"); System.out.println("Cutting the pizza into diagonal slices");
} }
public void box() { public void box() {
System.out.println("Place pizza in official PizzaStore box"); System.out.println("Place pizza in official PizzaStore box");
} }
public void setName(String name) {
this.name = name;
}
public String getName() { public String getName() {
return name; return name;
} }
public String toString() { public String toString() {
StringBuffer display = new StringBuffer(); StringBuffer result = new StringBuffer();
display.append("---- " + name + " ----\n"); result.append("---- " + name + " ----\n");
display.append(dough + "\n"); if (dough != null) {
display.append(sauce + "\n"); result.append(dough);
for (int i = 0; i < toppings.size(); i++) { result.append("\n");
display.append((String )toppings.get(i) + "\n"); }
if (sauce != null) {
result.append(sauce);
result.append("\n");
}
if (cheese != null) {
result.append(cheese);
result.append("\n");
} }
return display.toString(); if (veggies != null) {
for (int i = 0; i < veggies.length; i++) {
result.append(veggies[i]);
if (i < veggies.length-1) {
result.append(", ");
}
}
result.append("\n");
}
if (clam != null) {
result.append(clam);
result.append("\n");
}
if (pepperoni != null) {
result.append(pepperoni);
result.append("\n");
}
return result.toString();
} }
} }
package pizzeria.pizza;
import pizzeria.ingredients.PizzaIngredientFactory;
public class VeggiePizza extends Pizza {
public VeggiePizza(PizzaIngredientFactory ingredientFactory) {
this.ingredientFactory = ingredientFactory;
}
public void prepare() {
System.out.println("Preparing " + name);
dough = ingredientFactory.createDough();
sauce = ingredientFactory.createSauce();
cheese = ingredientFactory.createCheese();
veggies = ingredientFactory.createVeggies();
}
}
package pizzeria.store; package pizzeria.store;
import pizzeria.ingredients.ChicagoPizzaIngredientFactory;
import pizzeria.ingredients.PizzaIngredientFactory;
import pizzeria.pizza.*; import pizzeria.pizza.*;
public class ChicagoPizzaStore extends PizzaStore { public class ChicagoPizzaStore extends PizzaStore {
Pizza createPizza(String item) { protected Pizza createPizza(String item) {
if (item.equals("cheese")) { Pizza pizza = null;
return new ChicagoStyleCheesePizza(); PizzaIngredientFactory ingredientFactory =
} else if (item.equals("veggie")) { new ChicagoPizzaIngredientFactory();
return new ChicagoStyleVeggiePizza();
} else if (item.equals("clam")) { if (item.equals("cheese")) {
return new ChicagoStyleClamPizza();
} else if (item.equals("pepperoni")) { pizza = new CheesePizza(ingredientFactory);
return new ChicagoStylePepperoniPizza(); pizza.setName("Chicago Style Cheese Pizza");
} else return null;
} else if (item.equals("veggie")) {
pizza = new VeggiePizza(ingredientFactory);
pizza.setName("Chicago Style Veggie Pizza");
} else if (item.equals("clam")) {
pizza = new ClamPizza(ingredientFactory);
pizza.setName("Chicago Style Clam Pizza");
} else if (item.equals("pepperoni")) {
pizza = new PepperoniPizza(ingredientFactory);
pizza.setName("Chicago Style Pepperoni Pizza");
}
return pizza;
} }
} }
package pizzeria.store; package pizzeria.store;
import pizzeria.ingredients.NYPizzaIngredientFactory;
import pizzeria.ingredients.PizzaIngredientFactory;
import pizzeria.pizza.*; import pizzeria.pizza.*;
public class NYPizzaStore extends PizzaStore { public class NYPizzaStore extends PizzaStore {
Pizza createPizza(String item) { protected Pizza createPizza(String item) {
Pizza pizza = null;
PizzaIngredientFactory ingredientFactory =
new NYPizzaIngredientFactory();
if (item.equals("cheese")) { if (item.equals("cheese")) {
return new NYStyleCheesePizza();
pizza = new CheesePizza(ingredientFactory);
pizza.setName("New York Style Cheese Pizza");
} else if (item.equals("veggie")) { } else if (item.equals("veggie")) {
return new NYStyleVeggiePizza();
pizza = new VeggiePizza(ingredientFactory);
pizza.setName("New York Style Veggie Pizza");
} else if (item.equals("clam")) { } else if (item.equals("clam")) {
return new NYStyleClamPizza();
pizza = new ClamPizza(ingredientFactory);
pizza.setName("New York Style Clam Pizza");
} else if (item.equals("pepperoni")) { } else if (item.equals("pepperoni")) {
return new NYStylePepperoniPizza();
} else return null; pizza = new PepperoniPizza(ingredientFactory);
pizza.setName("New York Style Pepperoni Pizza");
}
return pizza;
} }
} }
...@@ -4,9 +4,9 @@ import pizzeria.pizza.Pizza; ...@@ -4,9 +4,9 @@ import pizzeria.pizza.Pizza;
public abstract class PizzaStore { public abstract class PizzaStore {
abstract Pizza createPizza(String item); protected abstract Pizza createPizza(String item);
public final Pizza orderPizza(String type) { public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type); Pizza pizza = createPizza(type);
System.out.println("--- Making a " + pizza.getName() + " ---"); System.out.println("--- Making a " + pizza.getName() + " ---");
pizza.prepare(); pizza.prepare();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment