简单的javaweb版kfc点餐收银系统

本文详细介绍了使用JavaWeb实现的KFC点餐收银系统,涵盖单例模式和工厂模式的应用。系统包括餐品结算、找零、套餐结算、优惠券使用、活动参与、打印小票、可视化界面、会员储值卡功能、营业额统计等功能。源代码分为bean、controller、dao、service和utils五个部分,运用了Echarts进行数据可视化。
摘要由CSDN通过智能技术生成

简单的javaweb版kfc点餐收银系统,包含单例模式与工厂模式详解

说明:本次作业实现为简单的网页版,由 两人组队 共同完成。

基本需求:

1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动
5.模拟打印小票的功能
6.html.jsp实现简单的可视化界面。
7.实现会员储值卡功能,完成储值卡消费。
8.实现当天营业额和餐品销量计算和统计,用数据库记录。
利用JS的图库表Echars,以表格形式实现数据可视化。

源代码说明:

1:bean文件夹:实体类源码
2:controller文件夹:控制层源码
3:dao文件夹:数据库操作源码
4:service文件夹:业务类源码
5:utils文件夹:工具类源码

用到的设计模式:

单点食物:
采用简单工厂:使用反射实现食品类的实例化
工厂类 :(SimFoodFactory)

套餐食物:
采用抽象工厂:生成套餐系列产品(三个套餐)
工厂类:(ComboOneFactory ComboTwoFactory ComboThreeFactory )

数据库连接池
采用单例模式:创建c3p0数据库连接池对象。

单例模式与工厂模式的简单学习与说明:

单例模式:
(1)饿汉式: 线程安全,调用效率高。 但是,不能延时加载
(2)懒汉式:线程安全,调用效率不高。但是可以延时加载。
(3)双重检测锁:线程安全,调用效率高。可以延时加载
(4)静态内部类:
(5)枚举单例:线程安全,调用效率高,不能延时加载
五种单例模式简单代码声明:
(1) 饿汉式:

public class SingletonDemo01{
private static final SingletonDemo01 s = new SingletonDemo02();
//不管有无调用,在内部直接实例化对象造成资源浪费,不可延时加载
private SingletonDemo01(){} //私有化构造器
public static /*synchronized*/ SingletonDemo02 getInstance(){
return s;
}
}

如果只是加载本类,而不是要调用getInstance(),甚至永远没有调用,则会造成资源浪费!
(2) 懒汉式:

public class SingletonDemo02 {
private static SingletonDemo02 s;
private SingletonDemo02(){} //私有化构造器
public static synchronized SingletonDemo02 getInstance(){
if(s==null){
s = new SingletonDemo01();
}
return s;
}
}

**特点:延迟加载, 懒加载! 真正用的时候才加载!资源利用率高了。但是,每次调用getInstance()方法都要同步,并发
效率较低。
**
(3) 双重检测锁:

public class SingletonDemo03 {
private static SingletonDemo03 instance = null;
public static SingletonDemo03 getInstance() {
if (instance == null) {
SingletonDemo03 sc;
synchronized (SingletonDemo03.class) {
sc = instance;
if (sc == null) {
synchronized (SingletonDemo03.class) {
if(sc == null) {
sc = new SingletonDemo03();
}
}
instance = sc;
}
}
}
return instance;
}
private SingletonDemo03() {
}
}

特点:式将同步内容下方到if内部,提高了执行的效率不必每次获取对象时都进行同步,只有第一次才同步
创建了以后就没必要了。

(4) 静态内部类:

public class SingletonDemo04 {
private static class SingletonClassInstance {
private static final SingletonDemo04 instance = new SingletonDemo04();
}
public static SingletonDemo04 getInstance() {
return SingletonClassInstance.instance;
}
private SingletonDemo04() {
}
}

特点:外部类没有static属性,则不会像饿汉式那样立即加载对象。只有真正调用getInstance(),才会加载静态内部类。加载类时是线程安全的。 instance是static final
类型,保证了内存中只有这样一个实例存在,而且只能被赋值一次,从而保证了线程安全性. –兼备了并发高效调用和延迟加载的优势!

(5) 枚举单例:

public enum SingletonDemo05 {
/**
* 定义一个枚举的元素,它就代表了Singleton的一个实例。
*/
INSTANCE;
/**
* 单例可以有自己的操作
*/
public void singletonOperation(){
//功能处理
}
}

特点:实现简单枚举本身就是单例模式。由JVM从根本上提供保障!避免通过反射和反序列化的漏洞! 无延迟加载
单例模式总结:除了枚举式其他几种都存在反射与反序列化的漏洞,饿汉式速度最快,但不可以延时加载,懒汉式因为线程同步的原因速度最慢,其他几种也较快,仅低于单例模式

应用场景:
-windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
– 项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,每次new一个对象去读取。
– 网站的计数器,一般也是采用单例模式实现,否则难以同步。
– 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作
,否则内容不好追加。
– 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
– 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
– Application 也是单例的典型应用(Servlet编程中会涉及到)
– 在Spring中,每个Bean默认就是单例的,这样做的优点是Spring容器可以管理
– 在servlet编程中,每个Servlet也是单例
– 在spring MVC框架/struts1框架中,控制器对象也是单例

工厂模式:

本质:实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
**
(1) 简单工厂模式:简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。用来生产同一等级结构中的任意产品。
**

public class CarFactory {
public static Car createCar(String type){
Car c = null;
if("奥迪".equals(type)){
c = new Audi();
}else if("奔驰".equals(type)){
c = new Benz();
}
return c;
}
}
public class CarFactory {
public static Car createAudi(){
return new Audi();
}
public static Car createBenz(){
return new Benz();
}
}

(2)工厂方法模式:
为了避免简单工厂模式的缺点,不完全满足OCP。 工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。用来生产同一等级结构中的固定产品。(支持增加任意产品)
(3)抽象工厂模式
用来生产不同产品族的全部产品。主要针对系列产品(对于增加新的产品,无能为力;支持增加产品族)

应用场景:
– JDK中Calendar的getInstance方法
– JDBC中Connection对象的获取
– Hibernate中SessionFactory创建Session
– spring中IOC容器创建管理bean对象
– XML解析时的DocumentBuilderFactory创建解析器对象
– 反射中Class对象的newInstance()

简单的学习完设计模式后,让我们来了解下kfc点餐收银系统吧

系统源代码结构:

1:bean文件夹:实体类源码
2:controller文件夹:控制层源码
3:dao文件夹:数

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值