Pizza ordering system----implementation of simple factory mode
A basic introduction to the simple factory pattern:
If you want to design a pizza ordering system now, the specific requirements are:
- 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 .
- Each pizza is specifically prepared, baked, cut, packaged, and more .
- Complete the ordering system for the pizza shop .
According to the principles of design patterns, we can design the following structure
-
PizzaFactory is a pizza production factory that produces different pizzas based on different information.
-
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)
-
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
Article directory
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
暂无此披萨类型,订购失败!
~~~~退出程序~~~~