简单工厂模式:
披萨店需要生产各式各样的披萨,披萨必须经过准备,烘烤,切片,包装几个步骤进行生产,但是可以有各种各样的品种,比如奶酪披萨,蛤蜊披萨,意大利披萨,蔬菜披萨等等。
但是各个地方的人又有不同的口味,比如原生口味,重庆风味,湖南风味等等。
代码实现:
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个地方,但是如果用工厂的方式去获取,
我们只需要修改工厂这一个类即可。