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:
Si desea diseñar un sistema de pedidos de pizza ahora, los requisitos específicos son:
- 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 .
- Cada pizza está específicamente preparada, horneada, cortada, empaquetada y más .
- 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
-
PizzaFactory es una fábrica de producción de pizza que produce diferentes pizzas basadas en información diferente.
-
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)
-
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
Directorio de artículos
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
暂无此披萨类型,订购失败!
~~~~退出程序~~~~