简单工厂模式

Posted lishuaiqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。

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的话还需要定义许多披萨工厂,并且改变传入的披萨工厂类型.

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

 

以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式-简单工厂

设计模式从青铜到王者第五篇:创建型模式之简单工厂模式( Simple Factory Pattern )

02 简单工厂模式

对比总结三个工厂模式(简单工厂,工厂方法,抽象工厂)

iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

设计模式—— 简单工厂