点餐系统(设计模式)

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,结合设计模式(2种以上)至少实现系统的以下功能:


正常餐品结算和找零。
基本套餐结算和找零。
使用优惠劵购买餐品结算和找零。
可在一定时间段参与店内活动(自行设计或参考官网信息)。
模拟打印小票的功能(写到文件中)。


用到的设计模式有抽象工厂模式,工厂模式,策略模式等。抽象工厂模式用来产生套餐,策略模式用来实现不同活动下实现不同价格的算法。
1. 抽象工场模式下包括一个食物基类baseFood,以及一个食物接口IFood,还有四种具体食物抽象类。
食物基类包含食物的种类,价格以及数量,还有总价函数和计算价格函数:

//基础食物类
public  class **baseFood** implements MemberStrategy{public String kind;//食物种类public int num;//食物数量public float price;//价格public float calcPrice(float foodPrice) {return this.num*this.price;}//总价(原价)public float totalPrice() {return this.num*this.price;}}

IFood接口:

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

汉堡抽象类:

/** 汉堡基类*/
public abstract class Hamburg extends baseFood implements IFood{//方法重构public void printMessage() {System.out.println("--"+this.kind+"汉堡\t 单价:"+this.price+"数量"+this.num/*+"合计"+this.totalPrice()*/);}
}

鸡翅抽象类:

public abstract class ChickenWings extends baseFood implements IFood{public void printMessage() {System.out.println("--"+this.kind+"鸡翅\t 单价:"+this.price+"数量"+this.num/*+"合计"+this.totalPrice()*/);}
}

薯条抽象类:

public abstract class FrenchFires extends baseFood implements IFood{public void printMessage() {System.out.println("--"+this.kind+"薯条\t 单价:"+this.price+"数量"+this.num/*"合计"+this.totalPrice()*/);}
}

饮品抽象类:

public abstract class Drink extends baseFood implements IFood{public void printMessage() {System.out.println("--"+this.kind+"饮料\t 单价:"+this.price+"数量"+this.num/*+"合计"+this.totalPrice()*/);}
}

抽象工厂类:

public interface IKFCFactory {// 生产汉堡public Hamburg createHamburg(int num1);// 生产薯条public FrenchFires createFrenchFries(int num2);// 生产鸡翅public ChickenWings createChickenWings(int num3);// 生产饮料public Drink createBeverage(int num4);
}

工厂实现类:

public  class KfcFactory implements IKFCFactory {//生产汉堡public Hamburg createHamburg(int num) {// TODO Auto-generated method stubreturn new ChinaHanburm(num);}//生产薯条public FrenchFires createFrenchFries(int num) {// TODO Auto-generated method stubreturn new ChinaFrenchFries(num);}//生产鸡翅public ChickenWings createChickenWings(int num) {// TODO Auto-generated method stubreturn new ChinaChickenWings(num);}@Overridepublic Drink createBeverage(int num) {// TODO Auto-generated method stubreturn new IDrink(num);}
}
  1. 策略模式下有MemberStrategy接口,接口的实现类Activity,baseStrategy和Price类。
    MemberStrategy接口:
/*策略模式,分出四种计算价格的算法* 1.有优惠券,无活动* 2.有活动,有优惠券* 3.无活动,无优惠劵* 4.有活动+有优惠券*/
public interface MemberStrategy {/*** 计算餐品的价格* @param booksPrice    餐品的原价* @return    计算出打折后的价格*/public float calcPrice(float foodPrice);

Price类:

//两个实例private MemberStrategy strategy;@SuppressWarnings("unused")private MemberStrategy strategy1;/*** 构造函数,传入一个具体的策略对象* @param strategy    具体的策略对象*/public Price(MemberStrategy strategy){this.strategy = strategy;this.strategy1=strategy;    }/*** 计算餐品的价格* @param foodPrice    餐品的原价* @return    计算出打折后的价格*/public float quote (float foodPrice ){return this.strategy.calcPrice(foodPrice);}
}

baseStrategy类:

/** 优惠券*/
public class baseStrategy  implements MemberStrategy{public float calcPrice(float foodPrice) {//重写计算价格方法return foodPrice-10;//10元的优惠券}
}

Activity类:

//活动
/** 店家有活动时所有商品打85折*/
public class Activity implements MemberStrategy{public float calcPrice(float foodPrice) {//重写计算价格方法return foodPrice*0.85f;}
}

设计类图如下:
在这里插入图片描述
界面如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67462.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

餐饮企业数据可视化大屏(智慧餐饮)

随着信息技术的深入发展,数据大屏的适用场景日益广泛,集工作汇报、实时监控和预测分析等功能于一身。 数据可视化的本质是视觉对话,数据可视化将数据分析技术与图形技术结合,清晰有效地将分析结果信息进行解读和传达。 当前很多餐…

163邮箱和qq邮箱如何开启pop和IMAP授权

首先是163邮箱,首先在主页上选择设置在设置里选择接下来就要开启权限,打钩就行了选择客户端授权密码,设置在第三方邮件的登录密码,这个密码就是在第三方客户端登陆的密码。 QQ邮箱同样先选择设置,然后选择账户&#xf…

在Outlook2007中设置QQ邮箱为IMAP/SMTP服务器

写Outlook设置QQ邮箱的攻略很多,但是都设置成POP3服务器。原本以为设置IMAP服务器流程一致,没想到低估了outlook和腾讯的麻烦程度。搞了一上午终于正确设置,写下来给有需要的人参考。 ——————————————————————————…

oracle qq邮箱不能用,QQ邮箱怎么不能用?QQ邮箱崩了官方公告

很久不用一次的QQ邮箱出现了大规模的崩溃,在5月6日突然有小伙伴反映,QQ邮箱PC端出现报错,就算是换了浏览器也没有用,那么这究竟是什么情况?我们可以从官方给出的公告来了解,遇到这个问题的用户一起来看看吧…

语音识别使用推荐(讯飞、百度、腾讯、云知声等)

科大讯飞 http://www.xfyun.cn/default/online_demo 百度 https://www.baidu.com/link?urlGBbcO2NttzpFelhAWOSqrjSJ7EHyuFUT_R4c3PXMfVa&wd&eqiddbc31d4600009c600000000559e45bac 腾讯 https://cloud.tencent.com/product/asr 云知声 http://dev.hivoice.cn/ 推…

科大迅飞语音听写(流式版)WebAPI,Web前端、H5调用 语音识别,语音搜索,语音听写

前言 由于公司有个Web项目需要用到语音搜索功能,找了一些第三方库都不太理想,要么语音识别速度很慢,要么不能精确识别等等,最后选择了迅飞语音(迅飞语音听写(流式版)WebAPI)。迅飞语…

安卓接入讯飞语音识别

#因为该项目不适合图形展示,所以无图 需要使用录音功能,那么虚拟机是不行的,只能使用真机测试 集成到项目中,需要将讯飞SDK里的内容搬到项目对应位置 在AndroidMainfest.xml中添加相应权限,安卓多少版本需要在代码中动…

腾讯、百度、讯飞 语音识别

一、腾讯语音识别—一句话语音识别 1、账号申请 (1)搜索腾讯云官网 https://cloud.tencent.com/?fromSourcegwzcw.2212127.2212127.2212127&utm_mediumcpd&utm_idgwzcw.2212127.2212127.2212127 (2)打开语音识别 腾…

js pink老师

JS 基础 输入和输出语法 向body输出内容 document.write("<h1>眼泪为你唱歌</h1>")窗口弹出内容 alert("将军")控制台打印内容 console.log("勇敢的面对");输入语句 prompt("蓝色的雨")输入语句输出到页面 const n…

新增WebDB和ChatGPT组件,支持对ChatGPT资产进行纳管,JumpServer堡垒机v3.5.0发布

2023年7月24日&#xff0c;JumpServer开源堡垒机正式发布v3.5.0版本。在这一版本中&#xff0c;新生代数据库连接组件——问题终结者Chen强势来袭&#xff0c;替代原有的OmniDB组件&#xff0c;在兼容旧版本的同时&#xff0c;解决了旧组件性能不足的问题&#xff0c;为用户提供…

新增 WebDB 和 ChatGPT 组件,支持对 ChatGPT 资产进行纳管,JumpServer 堡垒机 v3.5.0 发布

▲图 1 新增 Web 可视化数据库连接组件 Chen&#xff0c;替代原有的 OmniDB 组件 2. 新增 GPT 资产连接组件 Kael&#xff0c;支持纳管 ChatGPT 资产 在 JumpServer v3.5.0 版本中&#xff0c;新增 Kael 组件。该组件集成了 GPT 平台&#xff0c;支持对 ChatGPT 资产进行纳管…

毕业设计\毕业论文论文下载查询\查重降重\PPT工具合集

目录 各类工科毕业设计源码下载 论文查询\下载 广西壮族自治区图书馆 国家哲学社会科学文献中心 OALib 查重 万方免费查重&#xff08;应届生免费一次&#xff09; 降重 秘塔写作猫 火龙果写作 PDF工具 PDF Shaper 思维导图 GitMind 开题报告\答辩 PPT 第一pp …

android绑定两个ip,安卓手机模拟器如何多开切换IP防封号的最新方法介绍

原标题&#xff1a;安卓手机模拟器如何多开切换IP防封号的最新方法介绍 很多手游玩家、工作室和网吧用户想在电脑上登手机游戏&#xff0c;其实在电脑上装一个手机模拟器就可以了&#xff0c; 而且可以改不同的IP地址&#xff0c;实现游戏无限多开&#xff0c;今天小编就来为大…

手机上什么App能连接mysql_这款APP让你的手机瞬间变身服务器,php+mysql,太硬核了!...

话不多说&#xff0c;开搞。 舞剑前面介绍了两款 Web 前端编辑神器&#xff0c;一款是 HopWeb&#xff0c; 适合新手开发小型项目&#xff0c;一款是 EasyWeb&#xff0c;适合进阶开发大型项目。 不管是小型项目还是大型项目&#xff0c;最终目的都是为了上线&#xff0c;这两款…

AndroidStudio连接不上真机的全面分析(真的超详细不是你打我)

前言 写这篇文章之前呢&#xff0c;我只想说我心很累。今天码代码码的好好的&#xff0c;结果在码好之后进行真机测试的时候突然发现连不上手机了 WDNMD&#xff01;&#xff01;&#xff01;本来被代码就搞得焦头烂额&#xff0c;这个时候仿佛我的手机也不嫌事大一般&#xf…

google android模拟器多系统,Android模拟器安装教程_体验google_Android系统手机

1、下载Android SDK&#xff1a;SDK由官方网站提供,官方下载地址&#xff1a;http://dl.google.com/android/android-sdk_r05-windows.zip (大小22M&#xff0c;如果点击不能下载&#xff0c;请复制地址到下载软件中进行下载)要了解更多也可以访问官方网站&#xff1a;http://d…

学妹跑过来抱着我的胳膊让我帮她在Linux上装jdk【手把手教学】

在Linux上装jdk 首先需要个安装包查看下默认的版本号解压jdk压缩包修改/etc/profile刷新/etc/profile修改 .bash _profile刷新.bash_profile查看版本 首先需要个安装包 下载较慢&#xff0c;直接用Xftp传一个就行了&#xff08;直接拉着拖拽过去就行&#xff09; 查看下默认…

我是如何利用闲置手机安装 centos7.0 linux发行版,实现一台内网服务器的

开始 首先你需要有一部闲置安卓手机(root)&#xff08;基于linux内核&#xff09;我的是 乐视x520 安装软件 linuxdeploy (一个运行在linux主线容器&#xff0c;linux发行版将运行在其中&#xff09; 缺点&#xff1a;无法使用 service , systemctl 命令&#xff0c;但是有…

android网络传输唤醒系统,Android手机唤醒群晖NAS系统

之前我们提到的群晖NAS是内部的Web浏览器控制&#xff0c;但是有时候我们不在内部网络的时候也需要打开NAS去操作&#xff0c;有时候甚至我们的NAS都没有开机&#xff0c;必须通过远程开机才能正常使用&#xff0c;那么应该如何通过手机唤醒NAS呢&#xff1f; 群晖很贴心的给我…

用adb往手机上装软件

这几天在给多部手机装软件&#xff0c;作为一个小学生我觉得有必要记录一下。 方法一、 1.用cmd打开dos界面&#xff0c;cd到adb所在的文件夹 2.然后检测设备是否连接 3.然后可以把apk安装进手机 方法二、 1.直接在adb所在的文件夹中新建一个文本文档&#xff0c;后缀改为ba…