Java 工厂方法设计模式

发布时间 2023-12-27 14:35:35作者: yan061

需求:
Pizza 有以下几个方法
prepare() 准备食材
bake() 烘焙
cut() 切割
box() 装盒

现在有2种披萨且和2地区有关,成都地区第一种是CDApplePizza,第二种是CDCheesePizza。北京地区的BJApplePizza和BJApplePizza。

PizzaStore有点单系统Order(city,pizzaType) 根据pizza type去制作对应的Pizza。

Pizza 抽象类

public abstract class Pizza {

    String pizzaName = null;

    public abstract void prepare();

    public void bake(){
        System.out.println(pizzaName+" 开始烘焙");
    }

    public void  cut(){
        System.out.println(pizzaName+" 开始切割");
    }

    public void  box(){
        System.out.println(pizzaName+" 开始打包");
    }

    void setName(String name){
        this.pizzaName = name;
    }

}

Pizza实现类

public class BJApplePizza extends Pizza {

    @Override
    public void prepare() {
        setName("北京Apple披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}

public class BJCheesePizza extends Pizza {

    @Override
    public void prepare() {
        setName("北京Cheese披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}

public class CDApplePizza extends Pizza {

    @Override
    public void prepare() {
        setName("成都Apple披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}
public class CDCheesePizza extends Pizza {

    @Override
    public void prepare() {
        setName("成都Cheese披萨");
        System.out.println(pizzaName+" 准备原材料");
    }

}

order抽象类

public abstract class OrderPizza {
    String orderType = null;
    String city = null;

    public OrderPizza(String city,String orderType){
        System.out.println("OrderPizza");
        this.orderType = orderType;
        this.city = city;
        Pizza pizza = createPizza();
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

    }

    abstract Pizza createPizza();

}

order实现类

public class OrderPizzaFactory extends OrderPizza{


    public OrderPizzaFactory(String city, String orderType) {
        super(city,orderType);
    }

    @Override
    Pizza createPizza( ) {
        Pizza pizza;

        if (city.equalsIgnoreCase("CD")){
            if (orderType.equalsIgnoreCase("cheese")){
                pizza = new CDCheesePizza();
            }else {
                pizza = new CDApplePizza();
            }
        }else {
            if (orderType.equalsIgnoreCase("cheese")){
                pizza = new BJCheesePizza();
            }else {
                pizza = new BJApplePizza();
            }
        }
        return pizza;
    }
}

Pizza store

public class PizzaStore {
    public static void main(String[] args) {

        new OrderPizzaFactory("BJ","cheese");
        new OrderPizzaFactory("CD","apple");

    }

}

输出结果