黑马程序员_银行业务调度系统

来源:互联网 发布:安卓数据存储5种方式 编辑:程序博客网 时间:2024/04/30 01:33

-----------android培训java培训java学习型技术博客、期待与您交流! ------------

要求:模拟实现银行业务调度系统逻辑 

思考:

1.     银行业务相关的对象可能有:客户,服务窗口,取号机;

2.     客户有三种类型:普通客户、快速客户和VIP客户;

3.     服务窗口有6个,分三类:普通窗口,快速窗口,VIP窗口;

4.     服务大厅只有一台取号机,但它能生成三种类型服务号:普通服务号、快速服务号和VIP服务号。

解题思路:

1.     客户有三种类型,建议使用枚举,因中文习惯,覆写toString方法,输出对应中文字符名。

2.     服务窗口有三类型,其中快速窗口、VIP窗口比普通窗口多了服务快速客户或VIP客户的功能,当快速客户或VIP客户不存在时,它们又能服务普通客户,存在父子关系。但考虑到实际生活中服务窗口可自由调整,故舍弃继承方案,创建实例变量窗口类型和窗口编号来标识不同服务窗口。因快速窗口和VIP窗口会服务客户类型会发生改变,故设置实例属性服务类型,定期检查特定客户,当特定客户不存在时,服务对象调整为普通客户;因快速窗口服务快速客户时,服务时间最短,故需创建方法计算不同服务类型对应的服务时间。

ServiceWindow类有四类实例变量:窗口类型、窗口名称、服务类型、服务编号,构造函数实现窗口类型和窗口名称的初始化。

有六种方法:启动方法、开始服务、获取服务编号、服务客户、未取得客户、计算服务花费时间。

因服务窗口相互独立,启动方法为创建一个独立线程,调用开始服务方法;开始服务,将服务类型设置为窗口类型,调用获取服务编号方法获取服务对象;若有客户,服务客户并计算服务花费时间,若未获取到服务对象,判断是否为快速窗口或VIP这类特殊窗口,若是将服务类型调整为普通服务,开始进行普通服务;若普通服务对象获取失败,服务窗口可休息一秒钟,然后开始新的循环。

3.     取号机只有一台,故应采用单例设计模式,取号机中能对三种服务编号进行生成和管理,彼此相互独立,故应创建号码管理类NumberManager类,它具有生成服务编号,存储服务编号队列,依次取出最前服务编号的功能;而取号机中定义有三种类型号码管理类,并由它提供生成服务编号和获取最前服务编号的功能。

4.     将程序设计中用到的常量数据建立Constants类存储,便于取用和修改。

5.     在主程序中,创建6个服务窗口,并用定时器启动取号机的三种号码管理机的生成服务编号功能模拟产生三种类型客户。

要点:

1.     枚举;

2.     多线程:线程池和定时器;

3.     单例设计模式;

4.     面向对象设计重要经验:谁拥有数据,谁就对外操作操作这些数据的方法。

0 0
原创粉丝点击