简单工厂模式

1.定义

定义一个工厂类,通过工厂类来生成需要的对象.

2.代码实现

以pizza为例子,需要不同的披萨,比如: 芝士披萨,花甲披萨,意式香肠披萨,蔬菜披萨.

定义一个抽象类Pizza

public abstract class Pizza {
    public void prepare() {}
    public void bake() {}
    public void cut() {}
    public void box() {}
}

定义抽象类Pizza的子类,四种披萨

public class CheesePizza extends Pizza {

}
public class ClamPizza extends Pizza {

}
public class PepperoniPizza extends Pizza {

}
public class VeggiePizza extends Pizza {
    
}

定义一个工厂类,专门负责生成pizza

public class SimplePizzaFactory {
    /**
     * 根据传入的参数生成具体的类型
     * @param type 类型
     * @return 根据类型生成的pizza对象
     */
    public Pizza createPizza(String type) {
        Pizza pizza = null;
        
        if (type.equals("cheess")) {
            pizza = new CheesePizza();
        } else if (type.equals("pepperoni")) {
            pizza = new PepperoniPizza();
        } else if (type.equals("veggie")) {
            pizza = new VeggiePizza();
        } else if (type.equals("clam")) {
            pizza = new ClamPizza();
        }
        return pizza;
    }
}

接下来就是定义披萨商店

public class PizzaStore {
    SimplePizzaFactory factory;

    public PizzaStore(SimplePizzaFactory factory) {
        super();
        this.factory = factory;
    }
    
    public Pizza orderPizza(String type) {
        Pizza pizza;
        pizza = factory.createPizza(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }
}

可以看到在构造函数中传入之前定义的工厂类,来生成具体的pizza类型,加工后返回给客户

3.总结

简单工厂只是定义了一个工厂类,把创建过程封装到这个类中,如果需要生成别的种类的pizza的话还需要定义许多披萨工厂,并且改变传入的披萨工厂类型.

而且为了获取正确的类型还需要知道传入的是什么披萨工厂,会多增加一层判断,增加代码的复杂程度....

原文地址:https://www.cnblogs.com/lishuaiqi/p/11111833.html