黑马程序员_关于银行业务调度系统的设计思路

来源:互联网 发布:头像源码怎么用 编辑:程序博客网 时间:2024/05/21 19:45

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

 该题让求职者写一个银行业务调度系统。

银行中有6个窗口,4个窗口为普通窗口,办理一般业务。

5号窗口为快速窗口,办理快速业务。

6号窗口为VIP窗口,办理VIP业务。

当没有快速客户时,快速窗口也受理一般业务。

当没有VIP客户时,VIP窗口也受理一般业务。

根据面向对象的设计思想。

有一个取号器类:管理取出的号码的类型,分别对应客户的类型。取号器只能有一个,所以设计为单例模式、

窗口类:该类调用取号器中分发的号码,根据号码的类型,为对应的客户服务。

 

 

取号器类:

取号器可以生成三个号码管理器,分别管理一般客户的序列,快速客户的序列和VIP客户的序列。取号器只有一个,所以为了保证它在内存中的唯一性,使用单例设计模式。

关于号码管理类:

该类中提供一个分号的方法,用于派发一个整数序列,该序列表示着被受理的业务的顺序。

还有一个将序列派发给窗口的方法,窗口根据取号器类中的这个方法,获取应该为哪个客户服务。

因为序列被以上两个方法所共用,所以定义了一个ArrayList集合,当客户来取号的时候,将分配给客户的号码添加到集合中,再加这个号码返回给客户。当窗口获取服务序列时,就将集合中的第一个元素移除。因为操作的是同一个集合,有可能出现安全隐患,所以需要同步。

 

 

窗口类:

该类中,使用了线程池创建一个线程。

使用枚举定义了3个类型:一般,快速,VIP;

线程中,对不同类型的客户分配相应类型的窗口为其服务。一般窗口如果没有获取到需要服务的客户,就等待1秒重新获取。快速窗口没有获取到需要快速服务的客户,就接着获取需要普通服务的客户。VIP窗口也和快速窗口的流程一样。

小知识:switch效率比if else效率高

 

主函数:

在主函数中,开启一个快速窗口,一个VIP窗口,五个普通窗口。

再开启三个线程,分别生成需要普通服务的客户,需要快速服务的客户,需要VIP服务的客户。

 

运行时出现数组角标越界异常,因为窗口在向号码管理器要号的过程中,号码管理器类中的数组中并没有数据,所以抛出异常。

 

总结:

该实例模拟银行业务调度系统。

根据面向对象的思想,创建一个窗口类,用于服务客户和叫号。

创建一个取号器,用于给不同类型的客户分派不同的号码,将该号码添加到集合中。

不同类型的窗口,为取号器中分派的类型进行一对一的服务。

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

0 0
原创粉丝点击