Implement Factory Method Design Pattern
parent
bd1b04c877
commit
0a7ef913da
@ -0,0 +1,35 @@
|
|||||||
|
package factory;
|
||||||
|
|
||||||
|
import factory.chicago.ChicagoPizzaStore;
|
||||||
|
import factory.ny.NYPizzaStore;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
PizzaStore nyStore = new NYPizzaStore();
|
||||||
|
PizzaStore chicagoStore = new ChicagoPizzaStore();
|
||||||
|
|
||||||
|
Pizza pizza = nyStore.orderPizza("cheese");
|
||||||
|
System.out.println("Ethan 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");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
package factory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public abstract class Pizza {
|
||||||
|
private String name;
|
||||||
|
private String dough;
|
||||||
|
private String sauce;
|
||||||
|
private final List<String> toppings = new ArrayList<>();
|
||||||
|
|
||||||
|
public void prepare() {
|
||||||
|
System.out.println("Preparing " + name);
|
||||||
|
System.out.println("Tossing dough...");
|
||||||
|
System.out.println("Adding sauce...");
|
||||||
|
System.out.println("Adding toppings: ");
|
||||||
|
for (String topping : toppings) {
|
||||||
|
System.out.println(" " + topping);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void bake() {
|
||||||
|
System.out.println("Bake for 25 minutes at 350");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cut() {
|
||||||
|
System.out.println("Cutting the pizza into diagonal slices");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void box() { System.out.println("Place pizza in official PizzaStore box"); }
|
||||||
|
|
||||||
|
public String getName() { return name; }
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDough(String dough) {
|
||||||
|
this.dough = dough;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSauce(String sauce) {
|
||||||
|
this.sauce = sauce;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getToppings() {
|
||||||
|
return toppings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder display = new StringBuilder();
|
||||||
|
display.append("---- ").append(name).append(" ----\n");
|
||||||
|
display.append(dough).append("\n");
|
||||||
|
display.append(sauce).append("\n");
|
||||||
|
for (String topping : toppings) {
|
||||||
|
display.append(topping).append("\n");
|
||||||
|
}
|
||||||
|
return display.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
|||||||
|
package factory;
|
||||||
|
|
||||||
|
public abstract class PizzaStore {
|
||||||
|
|
||||||
|
public abstract Pizza createPizza(String item);
|
||||||
|
|
||||||
|
public 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;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package factory.chicago;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
import factory.PizzaStore;
|
||||||
|
|
||||||
|
public class ChicagoPizzaStore extends PizzaStore {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pizza createPizza(String item) {
|
||||||
|
return switch (item) {
|
||||||
|
case "cheese" -> new ChicagoStyleCheesePizza();
|
||||||
|
case "veggie" -> new ChicagoStyleVeggiePizza();
|
||||||
|
case "clam" -> new ChicagoStyleClamPizza();
|
||||||
|
case "pepperoni" -> new ChicagoStylePepperoniPizza();
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package factory.chicago;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class ChicagoStyleCheesePizza extends Pizza {
|
||||||
|
|
||||||
|
public ChicagoStyleCheesePizza() {
|
||||||
|
setName("Chicago Style Deep Dish Cheese Pizza");
|
||||||
|
setDough("Extra Thick Crust Dough");
|
||||||
|
setSauce("Plum Tomato Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Shredded Mozzarella Cheese");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cut() {
|
||||||
|
System.out.println("Cutting the pizza into square slices");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package factory.chicago;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class ChicagoStyleClamPizza extends Pizza {
|
||||||
|
|
||||||
|
public ChicagoStyleClamPizza() {
|
||||||
|
setName("Chicago Style Clam Pizza");
|
||||||
|
setDough("Extra Thick Crust Dough");
|
||||||
|
setSauce("Plum Tomato Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Shredded Mozzarella Cheese");
|
||||||
|
getToppings().add("Frozen Clams from Chesapeake Bay");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cut() {
|
||||||
|
System.out.println("Cutting the pizza into square slices");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package factory.chicago;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class ChicagoStylePepperoniPizza extends Pizza {
|
||||||
|
|
||||||
|
public ChicagoStylePepperoniPizza() {
|
||||||
|
setName("Chicago Style Pepperoni Pizza");
|
||||||
|
setDough("Extra Thick Crust Dough");
|
||||||
|
setSauce("Plum Tomato Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Shredded Mozzarella Cheese");
|
||||||
|
getToppings().add("Black Olives");
|
||||||
|
getToppings().add("Spinach");
|
||||||
|
getToppings().add("Eggplant");
|
||||||
|
getToppings().add("Sliced Pepperoni");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cut() {
|
||||||
|
System.out.println("Cutting the pizza into square slices");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package factory.chicago;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class ChicagoStyleVeggiePizza extends Pizza {
|
||||||
|
|
||||||
|
public ChicagoStyleVeggiePizza() {
|
||||||
|
setName("Chicago Deep Dish Veggie Pizza");
|
||||||
|
setDough("Extra Thick Crust Dough");
|
||||||
|
setSauce("Plum Tomato Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Shredded Mozzarella Cheese");
|
||||||
|
getToppings().add("Black Olives");
|
||||||
|
getToppings().add("Spinach");
|
||||||
|
getToppings().add("Eggplant");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cut() {
|
||||||
|
System.out.println("Cutting the pizza into square slices");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package factory.ny;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
import factory.PizzaStore;
|
||||||
|
|
||||||
|
public class NYPizzaStore extends PizzaStore {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pizza createPizza(String item) {
|
||||||
|
return switch (item) {
|
||||||
|
case "cheese" -> new NYStyleCheesePizza();
|
||||||
|
case "veggie" -> new NYStyleVeggiePizza();
|
||||||
|
case "clam" -> new NYStyleClamPizza();
|
||||||
|
case "pepperoni" -> new NYStylePepperoniPizza();
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package factory.ny;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class NYStyleCheesePizza extends Pizza {
|
||||||
|
|
||||||
|
public NYStyleCheesePizza() {
|
||||||
|
setName("NY Style Sauce and Cheese Pizza");
|
||||||
|
setDough("Thin Crust Dough");
|
||||||
|
setSauce("Marinara Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Grated Reggiano Cheese");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package factory.ny;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class NYStyleClamPizza extends Pizza {
|
||||||
|
|
||||||
|
public NYStyleClamPizza() {
|
||||||
|
setName("NY Style Clam Pizza");
|
||||||
|
setDough("Thin Crust Dough");
|
||||||
|
setSauce("Marinara Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Grated Reggiano Cheese");
|
||||||
|
getToppings().add("Fresh Clams from Long Island Sound");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package factory.ny;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class NYStylePepperoniPizza extends Pizza {
|
||||||
|
|
||||||
|
public NYStylePepperoniPizza() {
|
||||||
|
setName("NY Style Pepperoni Pizza");
|
||||||
|
setDough("Thin Crust Dough");
|
||||||
|
setSauce("Marinara Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Grated Reggiano Cheese");
|
||||||
|
getToppings().add("Sliced Pepperoni");
|
||||||
|
getToppings().add("Garlic");
|
||||||
|
getToppings().add("Onion");
|
||||||
|
getToppings().add("Mushrooms");
|
||||||
|
getToppings().add("Red Pepper");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package factory.ny;
|
||||||
|
|
||||||
|
import factory.Pizza;
|
||||||
|
|
||||||
|
public class NYStyleVeggiePizza extends Pizza {
|
||||||
|
|
||||||
|
public NYStyleVeggiePizza() {
|
||||||
|
setName("NY Style Veggie Pizza");
|
||||||
|
setDough("Thin Crust Dough");
|
||||||
|
setSauce("Marinara Sauce");
|
||||||
|
|
||||||
|
getToppings().add("Grated Reggiano Cheese");
|
||||||
|
getToppings().add("Garlic");
|
||||||
|
getToppings().add("Onion");
|
||||||
|
getToppings().add("Mushrooms");
|
||||||
|
getToppings().add("Red Pepper");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue