Java设计模式(五) 工厂模式(一)

2014-11-24 08:27:10 · 作者: · 浏览: 2
1,定义抽象产品类
[ html]
package com.pattern.factory;
import java.util.ArrayList;
public abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList toppings = new ArrayList();
void prepare(){
System.out.println("Prepareing "+name);
System.out.println("Tossing dough...");
System.out.println("Adding sauce...");
System.out.println("Adding toppings: ");
for(int i=0;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;
}
}
2,具体产品类
[html]
package com.pattern.factory;
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");
}
}
[html]
package com.pattern.factory;
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");
}
}
3,定义抽象工厂类
[html]
package com.pattern.factory;
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) ;
}
4,定义具体工厂类
[html]
package com.pattern.factory;
import com.pattern.factory.bean.ChicagoStyleClamPizza;
import com.pattern.factory.bean.ChicagoStylePepperoniPizza;
import com.pattern.factory.bean.ChicagoStyleVeggiePizza;
public class ChicagoPizzaStore extends PizzaStore {
/**
* @see com.pattern.factory.PizzaStore#createPizza(java.lang.String)
*/
@Override
protected Pizza createPizza(String type) {
if(type.equals("cheese")){
return new ChicagoStyleCheesePizza();
} else if(type.equals("veggie")){
return new ChicagoStyleVeggiePizza();
} else if(type.equals("clam")){
return new ChicagoStyleClamPizza();
} else if(type.equals("pepperoni")){
return new ChicagoStylePepperoniPizza();
} else {
return null;
}
}
}
[html]
package com.pattern.factory;
import com.pattern.factory.bean.NYStyleClamPizza;
import com.pattern.factory.bean.NYStylePepperoniPizza;
import com.pattern.factory.bean.NYStyleVeggiePizza;
public class NYPi