工厂方法 读书笔记

工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要实例化的类是哪一个,工厂方法让类把实例化 推迟到子类。
[img]http://blufiles.storage.live.com/y1pZ1u4rC44uCjZnwn46CaeGatIYIVB2-kneM5uFiuWN2LPHcCNKKad7yDx_tV-pBhfOV1ouAqWI0c[/img]
package pattern;
import java.util.ArrayList;
public abstract class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore() {
}
public PizzaStore(SimplePizzaFactory factory) {
this.factory = factory;
}
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
abstract Pizza createPizza(String type);
}
class NYPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if (item.equals("cheese")) {
return new NYStyleCheesePizza();
} else if (item.equals("pepperoni")) {
return new NYStylePepperoniPizza();
} else if (item.equals("clam")) {
return new NYStyleClamPizza();
} else if (item.equals("veggie")) {
return new NYStyleVeggiePizza();
} else
return null;
}
}
class ChicagoPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if (item.equals("cheese")) {
return new ChicagoStyleCheesePizza();
} else if (item.equals("pepperoni")) {
return new ChicagoStylePepperoniPizza();
} else if (item.equals("clam")) {
return new ChicagoStyleClamPizz();
} else if (item.equals("veggie")) {
return new ChicagoStyleVeggiePizza();
} else
return null;
}
}
class CaliforniaPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if (item.equals("cheese")) {
return new CaliforniaStyleCheesePizza();
} else if (item.equals("pepperoni")) {
return new CaliforniaStylePepperoniPizza();
} else if (item.equals("clam")) {
return new CaliforniaStyleClamPizza();
} else if (item.equals("veggie")) {
return new CaliforniaStyleVeggiePizza();
} else
return null;
}
}
abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList toppings = new ArrayList();
public 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));
}
}
public void bake() {
System.out.println("Bake for 25 minutes at 350");
}
public void cut() {
System.out.println("Cutting the pizza into diagonal slices");
}
public void box() {
System.out.println("Place pizza in official PizzaStore box");
}
public String getName() {
return name;
}
}
class CheesePizza extends Pizza {
public CheesePizza() {
System.out.println("Cheesepizza");
}
}
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");
}
}
class ChicagoStyleCheesePizza extends Pizza {
public ChicagoStyleCheesePizza() {
name = "Chicago StyleDeep Dish Cheese Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Mozzarella Cheese");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
class CaliforniaStyleCheesePizza extends Pizza {
public CaliforniaStyleCheesePizza() {
name = "California Style sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated California Cheese");
}
}
class PepperoniPizza extends Pizza {
public PepperoniPizza() {
System.out.println("PepperoniPizza");
}
}
class NYStylePepperoniPizza extends Pizza {
public NYStylePepperoniPizza() {
name = "NY Style sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Pepperoni Cheese");
}
}
class ChicagoStylePepperoniPizza extends Pizza {
public ChicagoStylePepperoniPizza() {
name = "Chicago StyleDeep Dish Cheese Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Pepperoni Cheese");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
class CaliforniaStylePepperoniPizza extends Pizza {
public CaliforniaStylePepperoniPizza() {
name = "California Style sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Pepperoni Cheese");
}
}
class ClamPizza extends Pizza {
public ClamPizza() {
System.out.println("ClamPizza");
}
}
class NYStyleClamPizza extends Pizza {
public NYStyleClamPizza() {
name = "NY Style sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated ClamPizza Cheese");
}
}
class ChicagoStyleClamPizz extends Pizza {
public ChicagoStyleClamPizz() {
name = "Chicago StyleDeep Dish Cheese Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Clam Cheese");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
class CaliforniaStyleClamPizza extends Pizza {
public CaliforniaStyleClamPizza() {
name = "California Style sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Clam Cheese");
}
}
class VeggiePizza extends Pizza {
public VeggiePizza() {
System.out.println("VeggiePizza");
}
}
class NYStyleVeggiePizza extends Pizza {
public NYStyleVeggiePizza() {
name = "NY Style sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated VeggiePizza Cheese");
}
}
class ChicagoStyleVeggiePizza extends Pizza {
public ChicagoStyleVeggiePizza() {
name = "Chicago StyleDeep Dish Cheese Pizza";
dough = "Extra Thick Crust Dough";
sauce = "Plum Tomato Sauce";
toppings.add("Shredded Veggie Cheese");
}
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
class CaliforniaStyleVeggiePizza extends Pizza {
public CaliforniaStyleVeggiePizza() {
name = "California Style sauce and Cheese Pizza";
dough = "Thin Crust Dough";
sauce = "Marinara Sauce";
toppings.add("Grated Veggie Cheese");
}
}


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("cheese");
System.out.println("Joel ordered a " + pizza.getName() + "\n");
}
}


public class SimplePizzaFactory {
public Pizza createPizza(String type) {
Pizza pizza = null;
if (type.equals("cheese")) {
pizza = new CheesePizza();
}else if(type.equals("pepperoni")){
pizza=new PepperoniPizza();
}else if(type.equals("clam")){
pizza=new ClamPizza();
}else if(type.equals("veggie")){
pizza=new VeggiePizza();
}
return pizza;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值