简单工厂模式:
披萨店需要生产各式各样的披萨,披萨必须经过准备,烘烤,切片,包装几个步骤进行生产,但是可以有各种各样的品种,比如奶酪披萨,蛤蜊披萨,意大利披萨,蔬菜披萨等等。
但是各个地方的人又有不同的口味,比如原生口味,重庆风味,湖南风味等等。
代码实现:
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,创建四种原生口味的披萨
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,定义购买披萨的商店
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 一个对象。
那么这样做到底有什么好处呢?比如如果不用工厂去获取具体的实现类,我们在程序中new 了N多个具体类,如果这个类发生了改变,比如需要添加一个有参构造,那我们需要修改N个地方,但是如果用工厂的方式去获取,
我们只需要修改工厂这一个类即可。