정의
사용하는 이유
방법
실제 적용 UML
public class DependentPizzaStore {
public Pizza createPizzaStore(String storeName, String pizzaType) {
Pizza pizza = null;
if (storeName.equals("NY")) {
if (pizzaType.equals("cheese")) {
pizza = new NYStyleCheesePizza();
} else if (pizzaType.equals("peppernoni")) {
pizza = new NYStylePeppernoniPizza();
} else if (pizzaType.equals("veggie")) {
pizza = new NYStyleVeggiePizza();
} else {
return null;
}
} else if(storeName.equals("Chicago")) {
if (pizzaType.equals("cheese")) {
pizza = new ChicagoStyleCheesePizza();
} else if (pizzaType.equals("peppernoni")) {
pizza = new ChicagoStylePeppernoniPizza();
} else if (pizzaType.equals("veggie")) {
pizza = new ChicagoStyleVeggiePizza();
} else {
return null;
}
} else {
System.out.println("invalid type of pizza");
return null;
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
public abstract class PizzaStore {
protected abstract Pizza createPizza(String type);
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
public class NYPizzaStore extends PizzaStore {
@Override
protected Pizza createPizza(String type) {
if (type.equals("cheese")) {
return new NYStyleCheesePizza();
} else if (type.equals("peppernoni")) {
return new NYStylePeppernoniPizza();
} else if (type.equals("veggie")) {
return new NYStyleVeggiePizza();
} else {
return null;
}
}
}
public abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList 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 (int i = 0; i < toppings.size(); i++) {
System.out.println(toppings.get(i));
}
}
public void bake() {
System.out.println("Bake for 25 minutes at 350");
}
public void cut() {
System.out.println("Cutting the pizza into 8 slices");
}
public void box() {
System.out.println("Place pizza in official PizzaStore box");
}
public String getName() {
return name;
}
}
public class NYStyleCheesePizza extends Pizza{
public NYStyleCheesePizza() {
name = "New York Cheese Pizza";
dough = "Thin Curst Dough";
sauce = "Marinara Sause";
toppings.add("체다 치즈");
toppings.add("파슬리");
}
}