java设计模式之simpleFactory

来源:互联网 发布:2017最火红网络歌曲 编辑:程序博客网 时间:2024/05/22 08:08

工厂模式有以下几种形态:

① 简单工厂(Simple Factory)
② 工厂方法(Factory Method)
③ 抽象工厂(Abstract Factory)

今天主要了解了一下Simple Factory,不多说什么了,用代码说话:)

一下例子参考head first design pattern:

Pizza orderPizza{

Pizza pizza =- new Pizza();

pizza.prepare();

pizza.bake();

pizza.cut();

pizza.box();

return pizza;

}

看到上面的代码大家觉得挺好的呀,没什么问题,我需要一个pizza类,我就创建了一个它的实例,调用它的一些犯法返回了这个实例对象。

可是接下来问题出现了,客人要求有很多种不同的pizza,你想着好办,我就给他加个参数啊:)

Pizza orderPizza(String type){

Pizza pizza ;

if(type.equls("cheese")){

pizza = new CheesePizza();

}else if(type.equls("greek")){

pizza = new GreekPizza();

}else if(type.equals("pepperoni"){

pizza = new PepperoniPizza();

}

pizza.prepare();

pizza.bake();

pizza.cut();

pizza.box();

return pizza;

}

这个时候你很开心的说,怎么样我完成了你需要的,但是当我们要添加新种类的Pizza的时候会出现什么问题,需要添加和修改orderPizza方法,你想那我就加啊,反正也就修改这个方法,也不会太麻烦。如果仅仅有一个方法或者类需要Pizza的话这么做确实不麻烦,但是当我们有很多类需要Pizza的时候会出现什么问题,比如PizzaShop中我们需要点Pizza,可能需要它的价格或者描述,这个时候我们需要一个Pizza实例,有可能我们还有一个运送Pizza的类需要Pizza实例,这个时候我们就需要在三个地方作出修改,在大的系统中可能更多。

在这个时候Simple Factory起作用了,因为我们已经知道了那一部分是可变的,这个时候我们就可以把这个可变的部分封装起来:)

public class SimplePizzaFactory{

public Pizza createPizza(String type){

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;

}

看到了吧,这就是一个Simple Factory,它创建了我们需要的Pizza对象。接下来看一下我们的orderPizza方法发生了什么改变。

public class PizzaStore{

SimplePizzaFactory factory;

public PizzaStore(SimplePizzaFactory  fatory){

this.factory = factory;

}

public Pizza orderPizza(String type){

Pizza pizza;

pizza = factory.createPizza(type);

pizza.prepare();

pizza.bake();

pizza.cut();

pizza.box();

return pizza;

}

现在我们修改代码的时候只要修改factory了就可以了,但是Simple Factory的问题在于不能继承,接下来的两个工厂模式很好的解决了该问题。正在学习中,不对的地方请大家指出:)

原创粉丝点击