抽象工厂类图:代码:public interface Sauce {}public class MarinaraSauce implements Sauce{public MarinaraSauce(){System.out.println("Add MarinaraSauce...");}} public class PlumTomatoSauce implements Sauce{public PlumTomatoSauce(){System.out.println("Add PlumTomatoSauce...");}}public interface Dough {}public class ThickCrustDough implements Dough{public ThickCrustDough(){System.out.println("Add ThickCrustDough...");}}public class ThinCrustDough implements Dough{public ThinCrustDough(){System.out.println("Add ThinCrustDough...");}}public interface Veggies {}public class Onion implements Veggies{ public Onion(){System.out.println("Add Onion...");}}public class Mushroom implements Veggies{public Mushroom(){System.out.println("Add Mushroom...");}}public class Garlic implements Veggies{public Garlic(){System.out.println("Add Garlic...");}}public class Eggplant implements Veggies{public Eggplant(){System.out.println("Add Eggplant...");}}public class BlackOlives implements Veggies{public BlackOlives(){System.out.println("Add BlackOlives...");}}public abstract class Pizza {String name;Dough dough;Sauce sauce;Veggies veggies[];abstract void prepare();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");}void setName(String name){=name;}String getname(){return name;}}public interface PizzaIngredientFactory {public Dough createDough();public Sauce createSauce();public Veggies[] createVeggies();}public class NYPizzaIngredientFactory implements PizzaIngredientFactory{ public Dough createDough(){return new ThinCrustDough();}public Sauce createSauce(){return new MarinaraSauce();}public Veggies[] createVeggies(){Veggies veggies[]={new Garlic(),new Onion(),new Mushroom()};return veggies;}}public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory{ public Dough createDough(){return new ThickCrustDough();}public Sauce createSauce(){return new PlumTomatoSauce();}public Veggies[] createVeggies(){Veggies veggies[]={new BlackOlives(),new Eggplant()};return veggies;}}public class VeggiesPizza extends Pizza{PizzaIngredientFactory ingredientFactory;public VeggiesPizza(PizzaIngredientFactory ingredientFactory){ this.ingredientFactory=ingredientFactory;}void prepare(){System.out.println("Preparing "+name);dough=ingredientFactory.createDough();sauce=ingredientFactory.createSauce();veggies=ingredientFactory.createVeggies();}}public class CheesePizza extends Pizza{PizzaIngredientFactory ingredientFactory;public CheesePizza(PizzaIngredientFactory ingredientFactory){ this.ingredientFactory=ingredientFactory;}void prepare(){System.out.println("Preparing "+name);dough=ingredientFactory.createDough();sauce=ingredientFactory.createSauce();}}public abstract class PizzaStore {public Pizza orderPizza(String type){Pizza pizza;pizza=createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}protected abstract Pizza createPizza(String type);}public class NYPizzaStore extends PizzaStore{ protected Pizza createPizza(String item){Pizza pizza=null;PizzaIngredientFactory ingredientFactory=new NYPizzaIngredientFactory();if(item.equals("cheese")){pizza=new CheesePizza(ingredientFactory);pizza.setName("New York Style Cheese Pizza");}else if(item.equals("veggie")){pizza=new VeggiesPizza(ingredientFactory);pizza.setName("New York Style veggie Pizza");}return pizza;}}public class ChicagoPizzaStore extends PizzaStore{ protected Pizza createPizza(String item){Pizza pizza=null;PizzaIngredientFactory ingredientFactory=new ChicagoPizzaIngredientFactory();if(item.equals("cheese")){pizza=new CheesePizza(ingredientFactory);pizza.setName("Chicago Style Cheese Pizza");}else if(item.equals("veggie")){pizza=new VeggiesPizza(ingredientFactory);pizza.setName("Chigago Style veggie Pizza");}return pizza;}}测试结果Preparing New York Style Cheese PizzaAdd ThinCrustDough...Add MarinaraSauce...Bake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore boxEthan ordered a New York Style Cheese Pizza Preparing Chigago Style veggie PizzaAdd ThickCrustDough...Add PlumTomatoSauce...Add BlackOlives...Add Eggplant...Bake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore boxJoel ordered a Chigago Style veggie Pizza Preparing New York Style veggie PizzaAdd ThinCrustDough...Add MarinaraSauce...Add Garlic...Add Onion...Add Mushroom...Bake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore boxMul ordered a New York Style veggie Pizza Preparing Chicago Style Cheese PizzaAdd ThickCrustDough...Add PlumTomatoSauce...Bake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore boxTom ordered a Chicago Style Cheese Pizza工厂方法:类图代码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");}void setName(String name){=name;}String getname(){return name;}}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");}void cut(){System.out.println("Cutting the pizza into square slices");}}public class ChicagoStyleV eggiePizza extends Pizza{public ChicagoStyleV eggiePizza(){name="Chigago Style veggie Pizza";dough="Extra Thick Crust Dough";sauce="Plum Tomato Sauce";toppings.add("BlackOlives");toppings.add("Eggplant");}}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 NYStyleV eggiePizza extends Pizza{ public NYStyleV eggiePizza(){name="New Y ork Style veggie Pizza";dough="Thin Crust Dough";sauce="Marinara Sauce";toppings.add("Garlic");toppings.add("Onion");toppings.add("Mushroom");}}public abstract class PizzaStore {public Pizza orderPizza(String type){Pizza pizza;pizza=createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}protected abstract Pizza createPizza(String type);}public class ChicagoPizzaStore extends PizzaStore{ protected Pizza createPizza(String item){Pizza pizza=null;if(item.equals("cheese")){pizza=new ChicagoStyleCheesePizza();}else if(item.equals("veggie")){pizza=newChicagoStyleV eggiePizza();}return pizza;}}public class NYPizzaStore extends PizzaStore{ protected Pizza createPizza(String item){Pizza pizza=null;if(item.equals("cheese")){pizza=new NYStyleCheesePizza();}else if(item.equals("veggie")){pizza=new NYStyleV eggiePizza();}return pizza;}}public class PizzaTestDrive {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("veggie");System.out.println("Joel ordered a "+pizza.getname()+"\n");pizza=nyStore.orderPizza("veggie");System.out.println("Mul ordered a "+pizza.getname()+"\n");pizza=chicagoStore.orderPizza("cheese");System.out.println("Tom ordered a "+pizza.getname()+"\n");}}测试结果:Preparing NY Style Sauce and Cheese PizzaTossing dough...Adding sauce...Adding toppings:Grated Reggiano CheeseBake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore boxEthan ordered a NY Style Sauce and Cheese Pizza Preparing Chigago Style veggie PizzaTossing dough...Adding sauce...Adding toppings:BlackOlivesEggplantBake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore boxJoel ordered a Chigago Style veggie PizzaPreparing New York Style veggie PizzaTossing dough...Adding sauce...Adding toppings:GarlicOnionMushroomBake for 25 minutes at 350Cutting the pizza into diagonal slicesPlace pizza in official PizzaStore boxMul ordered a New York Style veggie PizzaPreparing Chicago Style Deep Dish Cheese Pizza Tossing dough...Adding sauce...Adding toppings:Shredded Mozzarella CheeseBake for 25 minutes at 350Cutting the pizza into square slicesPlace pizza in official PizzaStore boxTom ordered a Chicago Style Deep Dish Cheese Pizza。