设计模式——工厂模式

来源:互联网 发布:三国无双7捏脸数据 编辑:程序博客网 时间:2024/06/14 05:22

《Head first 设计模式》P135的最后一个问答,简单工厂工厂方法之间的差异:

/* *P116,简单工厂 */public class PizzaStore {    SimplePizzaFactory factory;    public PizzaStore(SimplePizzaFactory factory) {        this.factory = factory;    }    public Pizza orderPizza(String type) {        pizza = factory.createPizza(type);        //TODO    }}//factory.createPizza(type)if(type.equals("cheese")) {    pizza = new XXXPizza();} else if(type.equals("yyy")) {    pizza = new YYYPizza();} else if(type.equals("zzz")) {    pizza = new ZZZPizza();}/* *工厂方法 */ public abstract class PizzaStore {    public Pizza orderPizza(String type) {        pizza = createPizza(type);        //TODO    }    protected abstract Pizza createPizza(String type);//具体怎么create交给子类实现}

简单工厂的那些createPizza方法在编写时已经写死,在运行时就是这么些的选择。如果想运行时,在多个方法间切换,就需要运用多态,比如用到工厂的接口、抽象类、父类,public PizzaStore(PizzaFactory factory)将SimplePizzaFactory抽象成更一般化的PizzaFactory,这样就可以根据传入的参数,确定具体的createPizza的方法了。
按照上述修改和额外的改动(将成员变量PizzaFactory的抽象往上拉到了类PizzaStore抽象),简单工厂就变成了工厂方法。

0 0