黑马程序员2012.6.27.22.39

---------------------- android培训java培训、期待与您交流! ----------------------银行业务调度系统:


今天终于把银行调度系统了,感觉上比交通灯管理系统“麻烦”。
貌似需求类型比较多,
首先是银行的业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
然后是他们对应的客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)、还有一个VIP客户。
异步随机生成各种类型的客户,生成各类型用户的概率比例为:
VIP客户:普通客户:快速客户 = 1:6:3.
客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值。
各类型客户在其对应窗口按顺序依次办理业务。 
当VIP窗口和快速业务窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。




这三个对应类型的客户:VIP客户,普通客户,快速客户
因为我也跑过银行用过他们的那个取号器,所以对他这个物理的原理还是有一点认识的,但是从来没有想过他的设计原理,今天看了张老师的视频,就感觉,对银行这个取号器,还有业务流程熟悉一点,对这个调度系统就会有更深的理解。、


在那个NumberManager类中,定义了一个存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合
private List queueNumbers = new ArrayList();前面使用List而不是ArrayList,是因为 这是面向对象编程吗,以后我不想用这个ArrayList,用LinkList也行,变量的类型,尽量面向父级,或者接口的上一级,尽量用上一级,不要用子级,这样更灵活。
在向集合中添加一个lastNumber时需要用到同步,因为下面还有一个方法移除集合中的数据的,如果不同步的话,有可能出现错误。


在NumberMachine类中,定义三个成员变量分别指向三个NumberManager对象,分别表示VIP客户,普通客户,快速客户的号码管理器。定义三个对应的方法来返回这三个NumberManager对象。
这个号码机器只有这一个实例,可以将他设计成单例设计模式。


在客户类型CustomerType类中,因为只有三种类型的客户,所以将CustomerType类设计成枚举类,其中定义三个成员分别表示三个类型的客户。然后重写toString方法,返回他们的中文名称。


服务窗口ServiceWindow类中,定义一个start方法,在内部启动一个线程,根据窗口的类别分别循环调用三个不同的方法,定义三个方法对三中客户进行服务,应该详细的打印其中的详细信息,让别人可以很清楚的看出,这个系统是怎么在运作的,他的各个窗口是怎么处理各种客户的,这些都应可在打印信息中看的出来。
在每个类型的客户拿号,定义了一个线程池:
它可安排在给定延迟后运行命令或者定期地执行
Executors.newScheduledThreadPool(int corePoolSize).scheduleAtFixedRate(
Runnable command,
long initialDelay,
long period,
TimeUnit unit)


command - 要执行的任务
initialDelay - 首次执行的延迟时间
period - 连续执行之间的周期
unit - initialDelay 和 period 参数的时间单位 
corePoolSize - 池中所保存的线程数,即使线程是空闲的也包括在内。 


创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。


在以后的编程中,尽量将程序中用到的常量定义到一个特意的类中。在这里也就是Constants类。


在主类中,用for循环创建出4个普通窗口,在创建出1个快速窗口,还有一个VIP窗口。接着创建三个定时器,分别定时的去创建新的普通客户号码,新的快速客户号码和新的VIP客户号码。


把各种线程的等待时间什么的都设置成一个合理的值,还有线程等待的时间也设置好,这样就可以运行测试系统的调度信息了,看看打印出来的信息,分析一下,看看系统的功能都实现了没有,逻辑方面的是否都合理。


---------------------- android培训java培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值