设计模式之工厂模式(披萨店案例)

    科技2025-11-13  9

    设计模式之工厂模式(披萨店案例)

    披萨类如下:

    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"); } }

    运行效果图如下:

    Processed: 0.010, SQL: 8