ピザ注文システム----シンプルなファクトリーモードの実装
単純なファクトリパターンの基本的な紹介:
今すぐピザ注文システムを設計する場合、具体的な要件は次のとおりです。
- 現在、GreekPizza、CheesePizza、Pepperなどの多くの種類のピザがあり、対応するピザを取得するには、ユーザーがピザの名前を入力する必要があります。
- 各ピザは特別に調理、焼き、カット、パッケージ化されています。
- ピザショップの注文システムを完成させます。
デザインパターンの原則に従って、次の構造を設計できます。
-
PizzaFactoryは 、さまざまな情報に基づいてさまざまなピザを製造するピザ製造工場です。
-
OrderPizza、PizzaStoreピザ注文クラス(ユーザー入力のピザ情報の受信、工場生産オブジェクトの取得、ピザ情報の出力を担当)、およびピザストア(つまり、クライアント、プログラムの初期ポイント)
-
ピザ、GreekPizza、CheesePizza、PepperPizza抽象ピザクラス、ギリシャピザクラス、チーズピザクラス、ペッパーピザクラス。
由于涉及部分较多,就直接列出实现步骤了,嘿嘿。
興味があれば、見ることができます->ハン・シュンピン先生のJavaデザインパターン
コードデモ
記事ディレクトリ
ピザショップとピザの注文
ピザ屋
package com.design_patterns.factory.simplefactory.order;
/**
* 披萨商店,可以通过披萨商店生产获取披萨
*/
public class PizzaStore {
public static void main(String[] args) {
new OrderPizza(new PizzaFactory()); //实例化披萨订单类,将披萨工厂对象传输进去进行生产
System.out.println("~~~~退出程序~~~~"); //输出程序退出信息
}
}
ピザ注文システムコード
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);
}
}
ピザファクトリー
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; //返回生产出的披萨
}
}
ピザの抽象クラスとそのサブクラス
抽象クラス
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;
}
}
ギリシャ風ピザ
package com.design_patterns.factory.simplefactory.pizza;
//定义希腊披萨类
public class GreekPizza extends Pizza {
@Override
public void prepared() {
System.out.println("制作希腊披萨---->准备原材料!");
}
}
チーズピザ
package com.design_patterns.factory.simplefactory.pizza;
//定义奶酪披萨类
public class CheesePizza extends Pizza {
@Override //覆写父类的抽象方法
public void prepared() {
System.out.println("制作奶酪披萨---->准备原材料!");
}
}
ペッパーピザ
package com.design_patterns.factory.simplefactory.pizza;
//定义胡椒披萨类
public class PepperPizza extends Pizza {
@Override
public void prepared() {
System.out.println("制作胡椒披萨---->准备原材料!");
}
}
実行結果(PizzaStoreはプログラムエントリです)
请输入您需要订购的Pizza类型:
greek
制作希腊披萨---->准备原材料!
希腊披萨----> baking;
希腊披萨----> cutting;
希腊披萨----> boxing;
请输入您需要订购的Pizza类型:
cheese
制作奶酪披萨---->准备原材料!
奶酪披萨----> baking;
奶酪披萨----> cutting;
奶酪披萨----> boxing;
请输入您需要订购的Pizza类型:
pepper
制作胡椒披萨---->准备原材料!
胡椒披萨----> baking;
胡椒披萨----> cutting;
胡椒披萨----> boxing;
请输入您需要订购的Pizza类型:
chian
暂无此披萨类型,订购失败!
~~~~退出程序~~~~