设计模式之工厂模式(披萨店案例)
披萨类如下:
import java.util.ArrayList;
public abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList toppings = new ArrayList();
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));
}
}
void bake(){
System.out.println("Bake for 25 minutes at 350");
}
void cut(){
System.out.println("Cutting the Pizza into diagonal slices");
}
void box(){
System.out.println("Place pizza in official PizzaStore box");
}
public String getName(){
return name;
}
披萨商店:
public abstract class PizzaStore{
public Pizza orderPizza(String type){
Pizza pizza;
pizza = creatPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
protected abstract Pizza creatPizza(String type);
}
这是纽约披萨分店:
public class NYPizzaStore extends PizzaStore {
@Override
protected Pizza creatPizza(String type) {
if (type.equals("cheese")){
return new NYStyleCheesePizza();
}
if (type.equals("veggie")){
return new NYStyleVeggiePizza();
}
if (type.equals("clam")){
return new NYStyleClamPizza();
}
if (type.equals("pepperoni")){
return new NYStylePepperoniPizza();
}
else
return null;
}
}
接下来要实现创建creatPizza方法里的几种披萨对象:
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");
}
}
public class NYStyleClamPizza extends Pizza {
public NYStyleClamPizza(){
name = "NY Style Sauce and Clam Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Reggiano Clam Cheese");
}
}
public class NYStylePepperoniPizza extends Pizza {
public NYStylePepperoniPizza(){
name = "NY Style Sauce and Pepperon Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Reggiano Pepperon Cheese");
}
}
public class NYStyleVeggiePizza extends Pizza {
public NYStyleVeggiePizza(){
name = "NY Style Sauce and Veggie Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Reggiano Veggie Cheese");
}
}
一家纽约风味的披萨店就准备好了,接下来测试一下:
public class Test {
public static void main(String[] args) {
PizzaStore nystore = new NYPizzaStore();
Pizza pizza1 = nystore.orderPizza("cheese");
System.out.println("Ethan ordered a "+pizza1.getName()+"\n");
Pizza pizza2 = nystore.orderPizza("clam");
System.out.println("Ethan ordered a "+pizza2.getName()+"\n");
}
}
运行效果图如下: