Pizza ordering design - simple factory pattern

Pizza ordering system----implementation of simple factory mode

A basic introduction to the simple factory pattern:
insert image description here

If you want to design a pizza ordering system now, the specific requirements are:

  1. Now there are many types of pizza , such as GreekPizza, CheesePizza, Pepper and other pizza types , requiring the user to enter the pizza name to get the corresponding pizza .
  2. Each pizza is specifically prepared, baked, cut, packaged, and more .
  3. Complete the ordering system for the pizza shop .

According to the principles of design patterns, we can design the following structure

  1. PizzaFactory is a pizza production factory that produces different pizzas based on different information.

  2. OrderPizza , PizzaStore pizza order class (responsible for receiving user input pizza information, obtaining factory production objects, outputting pizza information) and pizza store (ie client, program initial point)

  3. Pizza, GreekPizza, CheesePizza, PepperPizzaAbstract pizza class, Greek pizza class, cheese pizza class, pepper pizza class.

     由于涉及部分较多,就直接列出实现步骤了,嘿嘿。
    

    If you are interested, you can watch --> Teacher Han Shunping's java design pattern

code demo

Pizza shop and pizza ordering

pizza shop

package com.design_patterns.factory.simplefactory.order;

/**
 * 披萨商店,可以通过披萨商店生产获取披萨
 */
public class PizzaStore {
    
    
    public static void main(String[] args) {
    
    
        new OrderPizza(new PizzaFactory());         //实例化披萨订单类,将披萨工厂对象传输进去进行生产
        System.out.println("~~~~退出程序~~~~");     //输出程序退出信息
    }

}

Pizza ordering system code

package com.design_patterns.factory.simplefactory.order;

import com.design_patterns.factory.simplefactory.pizza.CheesePizza;
import com.design_patterns.factory.simplefactory.pizza.GreekPizza;
import com.design_patterns.factory.simplefactory.pizza.Pizza;

import java.util.Scanner;

/**
 * 定义披萨的订购类,通过此类可以对披萨进行订购
 */
public class OrderPizza {
    
    

    Pizza pizza = null;                     //声明披萨类对象
    String orderType = null;                //声明用户输入的订购信息
    Scanner sc = new Scanner(System.in);            //定义标准输入流对象并实例化

    //通过构造方法将生产披萨的工厂对象传递进来
    public OrderPizza(PizzaFactory pizzaFactory) {
    
    
        getPizza(pizzaFactory);         //调用getPizza方法

    }

    /**
     * 此方法为用户输入订购的pizza类型,工厂生产返回,输出披萨信息的方法
     * @param pizzaFactory
     */
    public void getPizza(PizzaFactory pizzaFactory){
    
    
        do{
    
    
            System.out.println("请输入您需要订购的Pizza类型:");
            orderType = sc.nextLine();                      //用户输入订购pizza的信息
            pizza = pizzaFactory.createPizza(orderType);            //通过工厂对象生产出对应的pizza
            if(pizza != null){
    
    
                //输出Pizza的制作流程
                pizza.prepared();
                pizza.bake();
                pizza.cut();
                pizza.box();
            }else {
    
    
                System.out.println("暂无此披萨类型,订购失败!");
                break;
            }
        }while (true);
    }

}

Pizza Factory

package com.design_patterns.factory.simplefactory.order;

import com.design_patterns.factory.simplefactory.pizza.CheesePizza;
import com.design_patterns.factory.simplefactory.pizza.GreekPizza;
import com.design_patterns.factory.simplefactory.pizza.PepperPizza;
import com.design_patterns.factory.simplefactory.pizza.Pizza;

/**
 * 定义披萨工厂类,通过此类方法可以生产所有类型披萨
 */
public class PizzaFactory {
    
    

    private Pizza pizza = null;

    /**
     * 定义Pizza工厂创建各种Pizza的方法,通过订单信息生产各种披萨
     * 采用了java多态性的特性,所有Pizza的子类都可以为其进行实例化
     * @param orderType
     * @return
     */
    public Pizza createPizza(String orderType){
    
    
        //使用switch语句,根据用户的不同需求生产出不同种类的pizza
        switch (orderType){
    
    
            case "greek":
                pizza = new GreekPizza();           //实例化披萨
                pizza.setName("希腊披萨---->");     //设置名称
                break;
            case "cheese":
                pizza = new CheesePizza();
                pizza.setName("奶酪披萨---->");
                break;
            case "pepper":
                pizza = new PepperPizza();
                pizza.setName("胡椒披萨---->");
                break;
            default:
                pizza = null;
                break;
        }
        return pizza;               //返回生产出的披萨
    }
}

Pizza abstract class and its subclasses

abstract class

package com.design_patterns.factory.simplefactory.pizza;

//定义所有披萨的抽象父类
public abstract class Pizza {
    
    
    protected String name;                  //定义披萨名称

    //准备原材料,不同的披萨不一样,因此,要将此方法做成抽象方法
    public abstract void prepared();

    //烘焙方法
    public void bake(){
    
    
        System.out.println(name + " baking; ");
    }

    //切割方法
    public void cut(){
    
    
        System.out.println(name + " cutting; ");
    }

    //打包方法
    public void box(){
    
    
        System.out.println(name + " boxing; ");
    }

    //为Pizza设置名称
    public void setName(String name){
    
    
        this.name = name;
    }
}

Greek Pizza

package com.design_patterns.factory.simplefactory.pizza;

//定义希腊披萨类
public class GreekPizza extends Pizza {
    
    

    @Override
    public void prepared() {
    
    
        System.out.println("制作希腊披萨---->准备原材料!");
    }
}

cheese pizza

package com.design_patterns.factory.simplefactory.pizza;

//定义奶酪披萨类
public class CheesePizza extends Pizza {
    
    

    @Override       //覆写父类的抽象方法
    public void prepared() {
    
    
        System.out.println("制作奶酪披萨---->准备原材料!");
    }


}

Pepper Pizza

package com.design_patterns.factory.simplefactory.pizza;

//定义胡椒披萨类
public class PepperPizza extends Pizza {
    
    

    @Override
    public void prepared() {
    
    
        System.out.println("制作胡椒披萨---->准备原材料!");
    }
}

Running result (PizzaStore is the program entry)

请输入您需要订购的Pizza类型:
greek
制作希腊披萨---->准备原材料!
希腊披萨----> baking; 
希腊披萨----> cutting; 
希腊披萨----> boxing; 
请输入您需要订购的Pizza类型:
cheese
制作奶酪披萨---->准备原材料!
奶酪披萨----> baking; 
奶酪披萨----> cutting; 
奶酪披萨----> boxing; 
请输入您需要订购的Pizza类型:
pepper
制作胡椒披萨---->准备原材料!
胡椒披萨----> baking; 
胡椒披萨----> cutting; 
胡椒披萨----> boxing; 
请输入您需要订购的Pizza类型:
chian
暂无此披萨类型,订购失败!
~~~~退出程序~~~~

Guess you like

Origin blog.csdn.net/weixin_43479947/article/details/107385063