首页 > 代码库 > 工厂模式

工厂模式

   工厂模式的主要作用是创建对象,调用者只需要知道对象名字,通过接口调用对象,不必知道对象是怎么创建的,是典型的解耦模式, 有三种不同类型:简单工厂模式,工厂方法模式和抽象工厂模式。

  简单工厂模式:又叫静态工厂方法模式,有三种角色:工厂类角色,抽象产品角色,具体产品角色;下面将引用《head first 设计模式》中的例子去认识简单工厂模式;

  首先创建一个抽象产品类,不同的pizza有不同的制作方法,准备的材料,烘烤时间,切片方式,以及装盒都不同,所以首先先创建一个pizza的抽象类

package org.yl;

/**
 * Created by yelei on 17-4-8.
 */
public abstract class Pizza {
//pizza的制作过程
public abstract void prepare(); public abstract void bake(); public abstract void cut(); public abstract void box(); }

创建两个具体产品类继承Pizza类

VeggiePizza类和CheesePizza类
package org.yl;

/**
 * Created by yelei on 17-4-8.
 */
public class VeggiePizza extends Pizza {
    public void prepare(){
        System.out.println("准备VeggiePizza");
    }
    public void bake(){
        System.out.println("烘烤VeggiePizza");
    }
    public  void cut(){
        System.out.println("切片VeggiePizza");
    }
    public void box(){
        System.out.println("打包VeggiePizza");
    }
}
package org.yl;

/**
 * Created by yelei on 17-4-8.
 */
public class CheesePizza extends Pizza {
    public void prepare(){
        System.out.println("准备CheesePizza");
    }
    public void bake(){
        System.out.println("烘烤CheesePizza");
    }
    public  void cut(){
        System.out.println("切片CheesePizza");
    }
    public void box(){
        System.out.println("打包CheesePizza");
    }
}

然后开始创建工厂类:

package org.yl;

/**
 * Created by yelei on 17-4-8.
 */
//这个工厂类专门用来创建实例
public class PizzaFactory {
    //定义一个方法,通过这个方法来实例对象,只需要传入相应的参数
    public static Pizza createPizza(String type){
        Pizza pizza=null;
        if (type.equals("cheese")){
              pizza=new CheesePizza();
        }else if (type.equals("veggiePizza")){
              pizza=new VeggiePizza();
        }
        return pizza;
    }
}

使用时只需要调用

Pizza pizza=PizzaFactory.createPizza("cheese");

这个静态方法。不用去关心这个对象是如何创建的。但简单工厂模式违背了开闭原则。每增加一种类型的批萨都要在工厂里面去添加。

工厂方法模式:工厂方法模式相对于简单工厂模式,是符合开闭原则,何为开闭原则,就是在新增需求的时候不必修改原有的代码,而是随意增加需要的类。

    工厂方法模式有四种角色:抽象工厂角色,具体工厂角色,抽象产品角色,具体产品角色,

 

 

工厂模式