每一瓶香水,最后都逃不过沦落成空气清新剂的命运。~~~
学习工厂模式之前先来看书中引用的例子:
披萨店~~~
在编写一段代码的时候需要进行分离可变与不变的部分,这样才能很好的维护代码。对修改进行关闭,对扩展进行开放。
Pizza orderPizza(String type){
Pizza pizza;
if(type.equals("cheese")){//此处为可变区域,应该移到其他类中
pizza =new CheesePizza();
}else if(type.equals("greek")){
pizza =new GreekPizza();
}else if(type.equals("pepper")){
pizza =new PepperoniPizza();
}
pizza.prepare();//此处为不变区域,pizza做法一致
pizza.bake();
pizza.cut();
pizza.box();
return Pizza;
}
定义一个简单的工厂模式:即将制造Pizza可变的部分单独放进一个类中。用此类专用来制造Pizza
package com.zl.factory.one;
public class SimplePizzaFactory {
public Pizza createPizza(String type){
Pizza pizza;
if(type.equals("cheese")){
pizza =new CheesePizza();
}else if(type.equals("greek")){
pizza =new GreekPizza();
}else if(type.equals("pepper")){
pizza =new PepperoniPizza();
}
return Pizza;
}
}
那么以前的类就应该修改成如下:
package com.zl.factory.one;
public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory){
this.factory=factory;
}
public Pizza orderPizza(String type){
Pizza pizza;
pizza=factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return Pizza;
return pizza;
}
}
上面用的是简单工厂,很多时候都会用到,下面是书中简单工厂的类图: