最近在学习<Head First Design Pattern>一书的工厂模式这一部分,在这里记录一下学习的体会心得。
首先还是来看工厂方法的概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。(工厂方法是创建型设计模式)
下面进入我们的故事:
。。。。
先看一个不好的方法
现在你是一个专门做披萨的大厨,能做出各种美味的披萨!你现在有一个披萨类,以及你是如何制作这个披萨的方法都在这个披萨类里面:
public class Pizza{
void prepare(){};//做披萨前的准备
void bake(){};//烘焙你的披萨
void cut(){};//切割你的披萨
void box(){};//把披萨装盒
}
披萨类里面的方法的作用我都用注释写在旁边了。
现在你自己开了一家披萨店,而且你凭借你的手艺让你的小店生意兴隆!你的披萨店类的代码是这样的:
public class PizzaStore{
Pizza orderPizza(){//定制披萨的方法
Pizza pizza = new Pizza();
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
在你的披萨店里面有这样一个方法,当你需要定制一份披萨的时候,就调用orderPizza()这个方法,该方法里面会按流程制作一份披萨,按顺序调用制作这份披萨的各个方法步骤,最后返回这个披萨。
当然,你是一个手艺高超的披萨大厨,在你的披萨店里面不仅只有一种披萨,所以你需要通过一个参数来选择制作不同的披萨,并且还需要不同的披萨对象的代码,下面是修改后的代码:
起司披萨和意大利腊香肠披萨:
public class CheesePizza extends Pizza{
String name ="CheesePizza";
}
public class PepperoniPizza extends Pizza{
String name = "PepperoniPizza";
}
披萨店类:
public class PizzaStore{
Pizza orderPizza(String type){//根据输入的名字定制披萨的方法
Pizza pizza =null;
if(type.equals("cheese")){//如果选择是起司披萨就制作起司披萨
pizza = new CheesePizza();
}
else if(type.equals("pepperoni")){//意大利腊肠也不错
pizza = new PepperoniPizza();
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
这样,你的披萨店就可以根据不同的要求做出不同的披萨了!!