Diseño de pedido de pizza - patrón de fábrica simple

Sistema de pedido de pizza----implementación del modo de fábrica simple

Una introducción básica al patrón de fábrica simple:
inserte la descripción de la imagen aquí

Si desea diseñar un sistema de pedidos de pizza ahora, los requisitos específicos son:

  1. Ahora hay muchos tipos de pizza , como la pizza griega, la pizza con queso, la pimienta y otros tipos de pizza , que requieren que el usuario ingrese el nombre de la pizza para obtener la pizza correspondiente .
  2. Cada pizza está específicamente preparada, horneada, cortada, empaquetada y más .
  3. Completa el sistema de pedidos de la pizzería .

De acuerdo con los principios de los patrones de diseño, podemos diseñar la siguiente estructura

  1. PizzaFactory es una fábrica de producción de pizza que produce diferentes pizzas basadas en información diferente.

  2. OrderPizza , clase de pedido de pizza PizzaStore (responsable de recibir información de pizza ingresada por el usuario, obtener objetos de producción de fábrica, generar información de pizza) y pizzería (es decir, cliente, punto inicial del programa)

  3. Pizza, GreekPizza, CheesePizza, PepperPizzaClase de pizza abstracta, clase de pizza griega, clase de pizza de queso, clase de pizza de pimienta.

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

    Si está interesado, puede ver --> Patrón de diseño de java del profesor Han Shunping

demostración de código

Pizzería y pedidos de pizza

Pizzería

package com.design_patterns.factory.simplefactory.order;

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

}

Código del sistema de pedidos de pizza

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);
    }

}

fábrica de pizzas

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;               //返回生产出的披萨
    }
}

Clase abstracta de pizza y sus subclases.

clase abstracta

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;
    }
}

pizza griega

package com.design_patterns.factory.simplefactory.pizza;

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

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

Pizza de queso

package com.design_patterns.factory.simplefactory.pizza;

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

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


}

Pizzeta de Pimienta

package com.design_patterns.factory.simplefactory.pizza;

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

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

Resultado en ejecución (PizzaStore es la entrada del programa)

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

Supongo que te gusta

Origin blog.csdn.net/weixin_43479947/article/details/107385063
Recomendado
Clasificación