JAVA实现工厂模式模拟KFC收银系统

一、算法设计思路
1、所用类:
在这里插入图片描述

2、食品类类图:

在这里插入图片描述
3、工厂类类图:

在这里插入图片描述

二、主要函数实现

抽象食物类

public class AbstractFood {
 //类别
    protected String kind;
    //数量
    protected int num;
    //价格
    protected float price;
    //合计
    public float totalPrice(){
        return this.num * this.price;
    }
}

食物接口类

public interface Food {
 /**
     * 打印输出食物信息
     */
    void printMessage();
}

抽象工厂类factory

public interface Factory {
 public interface factory {
     //生产汉堡
     public Hamburger createHamburger(int num);
     //生产炸鸡类食物
     public Chicken createChicken(int num);
     //生产甜点
     public Dessert createDessert(int num);
     //生产饮品
     public Drinks createDrinks(int num);
 }
 public Hamburger createZingerBurger(int num);
 public Hamburger createBeefBurger(int num);
 public Hamburger createOrleansBurger(int num);
 public Hamburger createBeijingChicken(int num);
 public Chicken createChickenWings(int num);
 public Chicken createSpicyWings(int num);
 public Chicken createPopcornChicken(int num);
 public Dessert createChips(int num);
 public Dessert createEggTart(int num);
 public Dessert createSundae(int num);
 public Drinks createBlackTea(int num);
 public Drinks createCola(int num);
 public Drinks createCoffee(int num);
 public Combo createOneCombo(int num);
 public Combo createTwoCombo(int num);
 public Combo createThreeCombo(int num);

实际工厂类KFCfactory

public class KFCFactory implements Factory{
  //生产香辣鸡腿堡
 public ZingerBurger createZingerBurger(int num) {
        return new ZingerBurger(num);
    }
 //生产嫩牛五方
    public BeefBurger createBeefBurger(int num) {
        return new BeefBurger(num);
    }
    //奥尔良烤鸡腿堡
    public OrleansBurger createOrleansBurger(int num) {
        return new OrleansBurger(num);
    }
    //生产老北京鸡肉卷
    public BeijingChicken createBeijingChicken(int num) {
        return new BeijingChicken(num);
    }
    //奥尔良烤翅
    public ChickenWings createChickenWings(int num) {
        return new ChickenWings(num);
    }
    //香辣鸡翅
    public SpicyWings createSpicyWings(int num) {
        return new SpicyWings(num);
    }
    //鸡米花
    public PopcornChicken createPopcornChicken(int num) {
        return new PopcornChicken(num);
    }
    //生产薯条
    public Chips createChips(int num){
     return new Chips(num);
    }
    //生产蛋挞
    public EggTart createEggTart(int num){
     return new EggTart(num);
    }
    //生产圣代
    public Sundae createSundae(int num){
     return new Sundae(num);
    }
    //生产柠檬红茶
    public BlackTea createBlackTea(int num){
     return new BlackTea(num);
    }
    //生产可乐
    public Cola createCola(int num){
     return new Cola(num);
    }
    //生产雪顶咖啡
    public Coffee createCoffee(int num){
     return new Coffee(num);
    }
    //生产单人套餐
    public OneCombo createOneCombo(int num){
     return new OneCombo(num);
    }
    //生产双人套餐
    public TwoCombo createTwoCombo(int num){
     return new TwoCombo(num);
    }
    //生产三人套餐
    public ThreeCombo createThreeCombo(int num){
     return new ThreeCombo(num);
    }
}

测试类:

public class KFCtest {
 private static Scanner input;
 public static void main(String[] args) {
        /**
         * 定义一个肯德基(factory类型)
         */
        Factory factory = new KFCFactory();
        Customer customer = new Customer(factory);
        input = new Scanner(System.in);
        float ZingerBurger = 0;float OrleansBurger= 0;
        float BeefBurger= 0;float BeijingChicken = 0;
        float ChickenWings= 0;float SpicyWings = 0;
        float PopcornChicken = 0; float Chips= 0;
        float EggTart= 0;float Sundae = 0;
        float Cola= 0; float BlackTea= 0;
        float Coffee = 0;float OneCombo= 0;
        float TwoCombo= 0;float ThreeCombo = 0;
         System.out.println("    欢迎进入KFC点餐系统!             \n"
              +"  ---------------------------------------------------------------------  \n"
              +"  ****************************** KFC菜单 *******************************  \n"
              +"       | | | | | |  汉堡类: | | | | |           \n"
              +" 1.香辣鸡腿堡 ---------19.0元            2.奥尔良烤鸡腿堡 -19.5元      \n"
              +" 3.嫩牛五方 -----------18.0元            4.老北京鸡肉卷 ---17.0元      \n"
              +"  ---------------------------------------------------------------------  \n"
              +"    | | | | | |  鸡肉类: | | | | |           \n"
              +" 5.奥尔良烤翅(一对)--12.5元            6.香辣鸡翅 -------11.5元        \n"
              +" 7.鸡米花 -------------11.0元              \n"
              +"  ---------------------------------------------------------------------  \n"
              +"    | | | | | |  甜点类: | | | | |              \n"
              +" 8.薯条 ---------------14.0元            9.蛋挞 -----------8.0元      \n"
              +" 10.圣代 --------------11.0元              \n"
              +"  ---------------------------------------------------------------------  \n"
              +"    | | | | | |  饮品类: | | | | |             \n"
              +" 11.可乐 ---------------9.5元            12.柠檬红茶 -------11.5元      \n"
              +" 13.雪顶咖啡 -----------14.5元             \n"
              +"  ---------------------------------------------------------------------  \n"
              +"  ---------------------------------------------------------------------  \n"
              +"     | | | | | |  套餐类: | | | | |             \n"
              +" 14.单人套餐 -----------55元              \n"
              +"  1个香辣鸡腿堡+1对香辣鸡翅+1包薯条+1杯可乐/柠檬红茶(任点)      \n"
              +" 15.双人套餐 -----------75元              \n"
              +"  1个香辣鸡腿堡+1个奥尔良烤鸡腿堡/嫩牛五方/老北京鸡肉卷(任点)   \n"
              +"  1对奥尔良烤翅+2个蛋挞+2杯可乐/奶茶(任点)         \n"
              +" 16.三人套餐 -----------91元              \n"
              +"  3个奥尔良烤鸡腿堡/嫩牛五方/老北京鸡肉卷(任点)        \n"
              +"  1对奥尔良烤翅+1对香辣鸡翅+1包鸡米花           \n"
              +"  1包薯条+2杯圣代+2杯可乐/奶茶(任点)+1杯咖啡         \n"
              +" *********************************************************************** \n");
        while(true){
         System.out.println("请选择序号点餐:>");
            int a=input.nextInt();
            System.out.println("请选择数量:>");
            int b=input.nextInt(); 
            switch(a){
            case 1:
             //香辣鸡腿堡
             ZingerBurger = customer.orderZingerBurger(b);
                break;
            case 2:
             //奥尔良烤鸡腿堡
                OrleansBurger = customer.orderOrleansBurger(b);
                break;
            case 3:
             //嫩牛五方
                BeefBurger = customer.orderBeefBurger(b);
                break;
            case 4:
             //老北京鸡肉卷
                BeijingChicken = customer.orderBeijingChicken(b);
                break;
            case 5:  
             //奥尔良烤鸡翅
                ChickenWings = customer.orderChickenWings(b);
                break;  
            case 6:  
             //香辣鸡翅
             SpicyWings = customer.orderSpicyWings(b);
                break;
            case 7: 
              //鸡米花
                PopcornChicken = customer.orderPopcornChicken(b);
                break;
            case 8: 
                //薯条
                Chips = customer.orderChips(b);
                break;
            case 9: 
                //蛋挞
                EggTart = customer.orderEggTart(b);
                break;
            case 10: 
                //圣代
                Sundae = customer.orderSundae(b);
                break;
            case 11: 
                //可乐
                Cola = customer.orderCola(b);
                break;
            case 12: 
                //柠檬红茶
                BlackTea = customer.orderBlackTea(b);
                break;
            case 13: 
                //雪顶咖啡
                Coffee = customer.orderCoffee(b);
                break;
            case 14: 
                //单人套餐
                OneCombo = customer.orderOneCombo(b);
                break;
            case 15: 
                //双人套餐
                TwoCombo = customer.orderTwoCombo(b);
                break;
            case 16: 
                //三人套餐
                ThreeCombo = customer.orderThreeCombo(b);
                break;
            default:
             System.out.println("对不起,您所选择的餐品错误");
             break;
            }
            System.out.println("请选择是否继续点餐(1.是   2.否):>");
            int c=input.nextInt();
            if(c!=1){
             break;
            }
        }
	 float money1=ZingerBurger+OrleansBurger+BeefBurger+BeijingChicken;
        float money2=+ChickenWings+SpicyWings+PopcornChicken;
        float money3=+Chips+EggTart+Sundae;
        float money4=Cola+BlackTea+Coffee;
        float money5=OneCombo+TwoCombo+ThreeCombo;
        float money=money1+money2+money3+money4+money5;
        System.out.println("此次点餐共计:"+money);
        System.out.println("请问您是否具有优惠券? (1.是   2.否):>");
        int c=input.nextInt();
        int d=0;
        if(c==1){
         System.out.println("请输入优惠券金额:>");
         d=input.nextInt();
        }
        System.out.println("请输入实付金额:>");
        int e=input.nextInt();
        float changes=e-(money-d);
        System.out.println("找零:"+changes);
        System.out.println("欢迎下次点餐,祝您用餐愉快!");
    }
   }

五、总结

本次作业中,我们使用了工厂方法模式和抽象工厂模式两种设计模式,并应用了“开闭”原则和“依赖倒置”原则。

肯德基实例工厂——生产食物的工厂;食物(汉堡、鸡翅、薯条、可乐等等)——工厂生产的产品;顾客——点餐;用户——使用点餐系统为顾客点餐及结账。

肯德基店就是一个具体的工厂,此时,我们需要抽象一个工厂,在抽象工厂中指明了生产各种抽象食物的方法,如生产汉堡、鸡翅等。肯德基店就需要实现这个抽象工厂,生产具体的食品,如生产麻辣鸡腿汉堡、生产奥尔良鸡翅等。

前面提到了“抽象食物”,我们还需要对每个具体的食物添加抽象父类,如汉堡就是抽象父类,香辣鸡腿汉堡就是汉堡的一个子类,依次类推。这时,我们会发现,每一种食物又都存在着一些共同的属性,如风味、单价、数量等,因此,我们继续进行抽象,所有的抽象食物都继承一个抽象父类。如何订购肯德基生产的食物呢?这与工厂方法模式有所不同,这里我们使用组合的方式,将抽象工厂作为顾客类中的一个实例变量,顾客需要任何产品的时候,只需要向工厂请求即可,这就是抽象工厂模式的应用方式。顾客类和工厂类分开,客户无须修改就可以获得新产品。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值