黑马程序员-----银行调度系统

来源:互联网 发布:mac切换不了windows 编辑:程序博客网 时间:2024/05/23 01:25

模拟实现银行业务调度系统逻辑,具体需求如下:

Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。

Ø 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。

Ø 异步随机生成各种类型的客户,生成各类型用户的概率比例为:

VIP客户 :普通客户 :快速客户 = 1 :6 :3。

Ø 客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。

Ø 各类型客户在其对应窗口按顺序依次办理业务。

Ø 当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。

Ø 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。

Ø 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

知识点:

1、排队机类:排队机中,能够产生3中号码,普通的,快速的,vip的;

该类需要定义为单例模式,因为票资源将会被多个窗口调用,为了避免票同一时间被不同的窗口使用导致程序错误。

单例模式的写法:首先有一个私有的空构造函数,然后有静态的 类名 getInstance方法,返回一个instance;
接着有一个私有的静态的 类名 instance = new 类名();

2、号码管理器类:

private List queueNumber = new ArrayList();

//定义集合存储Number数量进行排队,此处 = 左边用List集合,是考虑到面向接口编程以达到更灵活的效果,变量的类型尽量面向父级、接口的上一级

生成一个Number,该Number必须同步,以免数据错乱

3、枚举类,定义顾客类型,普通、快速、VIP,并且写一个toString方法,将英文返回汉字的形式,让看的更真实。有这里的方法也可以想到给交通灯项目添加这样的方法,因为老师的代码输出是简写格式:S2N,阅读性较差。固,不妨一尝试自己改写。

4、服务窗口类,老师提到了一点就是,switch和else if 效率问题,记住switch的效率较高。

5、Main类:

线程池中的定时启动机制,其中有四个参数,

第一个实现Runnable接口,并且重写run方法;
第二个代表时间参数,为0 马上启动;

第三个参数代表周期,该周期自定义;
第四个参数代表代表时间单位,秒,分,小时,天等

在我见过的银行当中,假如服务窗口有5个,1到3是普通的,那么4号窗口是VIP的,而并不像视频中老师说的那样,普通1号窗口,普通2号,,,VIP1,VIP2。所以:

ServiceWindow expressWindow = new ServiceWindow();//定义窗口
expressWindow.setWindowId(5);//银行中的服务窗口是固定的,此处设置5号窗口为快速窗口
expressWindow.setType(CustomerType.EXPRESS);//将窗口定义为快速窗口
expressWindow.start();

//6号窗口为 VIP服务窗口
  ServiceWindow vipWindow = new ServiceWindow();
  vipWindow.setWindowId(6);//银行中的服务窗口是固定的,此处设置6号窗口为VIP窗口
vipWindow.setType(CustomerType.VIP);//将窗口定义为VIP窗口
vipWindow.start();

除了主要的项目外,老师还传授了面向对象的经典例子,一定要牢记在心:

人在黑板上画圆,人关门,列车司机将列车停下等。

PS:日记是看Java学习视频时,认为重要的知识点边看边记载下来的,大部分是视频中老师提到的知识点。由于是一个初学者,难免存在错误的地方,如若您的慧眼发现了我的错误,还请您评论指出我的不足之处,谢谢点评!

原创粉丝点击