簡單工廠模式

簡單工廠模式:

  披薩店須要生產各式各樣的披薩,披薩必須通過準備,烘烤,切片,包裝幾個步驟進行生產,可是能夠有各類各樣的品種,好比奶酪披薩,蛤蜊披薩,意大利披薩,蔬菜披薩等等。java

可是各個地方的人又有不一樣的口味,好比原生口味,重慶風味,湖南風味等等。ide

  代碼實現:this

1,建立披薩接口對象

package factorymode.simplefactory;

/**
 * @ClassName Pizaa
 * @Description 定義披薩接口
 * @Author liuyi
 * @Date 2020/6/15 20:50
 * @Version 1.0
 */
public interface Pizaa {

    //準備
    public void prepare();
    //烘烤
    public void bake();
    //切片
    public void cut();
    //包裝
    public void box();

}

2,建立四種原生口味的披薩blog

package factorymode.simplefactory;

/**
 * @ClassName CheesePizza
 * @Description 奶酪披薩
 * @Author liuyi
 * @Date 2020/6/15 20:58
 * @Version 1.0
 */
public class CheesePizza implements Pizaa{
    @Override
    public void prepare() {
        System.out.println("準備生產奶酪披薩");
    }

    @Override
    public void bake() {
        System.out.println("烘烤奶酪披薩");
    }

    @Override
    public void cut() {
        System.out.println("切片奶酪披薩");
    }

    @Override
    public void box() {
        System.out.println("包裝奶酪披薩");
    }
}

  

package factorymode.simplefactory;

/**
 * @ClassName ClamPizza
 * @Description 蛤蜊披薩
 * @Author liuyi
 * @Date 2020/6/15 21:00
 * @Version 1.0
 */
public class ClamPizza implements Pizaa{
    @Override
    public void prepare() {
        System.out.println("準備生產蛤蜊披薩");
    }

    @Override
    public void bake() {
        System.out.println("烘烤蛤蜊披薩");
    }

    @Override
    public void cut() {
        System.out.println("切片蛤蜊披薩");
    }

    @Override
    public void box() {
        System.out.println("包裝蛤蜊披薩");
    }
}

  

package factorymode.simplefactory;

/**
 * @ClassName PepperoniPizza
 * @Description 意大利披薩
 * @Author liuyi
 * @Date 2020/6/15 21:01
 * @Version 1.0
 */
public class PepperoniPizza implements Pizaa{
    @Override
    public void prepare() {
        System.out.println("準備生產意大利披薩");
    }

    @Override
    public void bake() {
        System.out.println("烘烤意大利披薩");
    }

    @Override
    public void cut() {
        System.out.println("切片意大利披薩");
    }

    @Override
    public void box() {
        System.out.println("包裝意大利披薩");
    }
}

  

package factorymode.simplefactory;

/**
 * @ClassName VeggiePIzza
 * @Description 蔬菜披薩
 * @Author liuyi
 * @Date 2020/6/15 21:00
 * @Version 1.0
 */
public class VeggiePIzza implements Pizaa{
    @Override
    public void prepare() {
        System.out.println("準備生產蔬菜披薩");
    }

    @Override
    public void bake() {
        System.out.println("烘烤蔬菜披薩");
    }

    @Override
    public void cut() {
        System.out.println("切片蔬菜披薩");
    }

    @Override
    public void box() {
        System.out.println("包裝蔬菜披薩");
    }
}

3,定義簡單工廠,用來生產披薩接口

package factorymode.simplefactory;

/**
 * @ClassName SimplePizzaFactory
 * @Description 生產披薩的簡單工廠
 * @Author liuyi
 * @Date 2020/6/15 21:03
 * @Version 1.0
 */
public class SimplePizzaFactory {
    public Pizaa createPizza(String type){
        Pizaa pizaa = null;
        switch (type){
            case "cheese":
                pizaa = new CheesePizza();
                break;
            case "clam":
                pizaa = new ClamPizza();
                break;
            case "pepperoni":
                pizaa = new PepperoniPizza();
                break;
            case "veggie":
                pizaa = new VeggiePIzza();
                break;
        }
        return pizaa;
    }
}

4,定義購買披薩的商店ip

package factorymode.simplefactory;

/**
 * @ClassName PizzaStrore
 * @Description 定義購買披薩的商店
 * @Author liuyi
 * @Date 2020/6/15 21:07
 * @Version 1.0
 */
public class PizzaStrore {
    SimplePizzaFactory factory;
    public PizzaStrore(SimplePizzaFactory factory){
        this.factory = factory;
    }

    //訂購披薩方法
    public Pizaa orderPizza(String type){
        Pizaa pizaa;
        pizaa = factory.createPizza(type);
        pizaa.prepare();
        pizaa.bake();
        pizaa.cut();
        pizaa.box();
        return pizaa;
    }
}

  代碼的實現很簡單,就是把建立具體披薩種類,也就是具體的對象交給了簡單工廠也就是SimplePizzaFactory去建立。這樣作的目的就是讓咱們的程序和具體類解耦。簡單的說法就是不在程序中直接new 一個對象。it

那麼這樣作到底有什麼好處呢?好比若是不用工廠去獲取具體的實現類,咱們在程序中new 了N多個具體類,若是這個類發生了改變,好比須要添加一個有參構造,那咱們須要修改N個地方,可是若是用工廠的方式去獲取,io

咱們只須要修改工廠這一個類便可。class

相關文章
相關標籤/搜索