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