所有工厂模式都用来封装对象的创建,这里主要谈论其中的工厂方法模式和抽象工厂模式。
一、定义
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
二、类图
工厂方法:
抽象工厂:
三、开比萨店
工厂方法:
//Creator public abstract class PizzaStore { //anOperation public Pizza orderPizza(String type){ Pizza pizza; pizza=createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } //factoryMethod abstract Pizza createPizza(String type); } //ConcreteCreator public class NYPizzaStore extends PizzaStore{ Pizza createPizza(String item){ if(item.equals("cheese")){ return new NYStyleCheesePizza(); }else if(item.equals("veggie")){ return new NYStyleVeggiePizza(); }else if(item.equals("clam")){ return new NYStyleClamPizza(); }else if(item.equals("pepperoni")){ return new NYStylePepperoniPizza(); }else return null; } } //Product 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; } } //ConcreteProduct 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"); } }
抽象工厂:
时间: 2024-11-10 10:22:46