银行业务调度系统:
需求分析:
1:银行内有六个业务窗口,1—4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口
2:有三种对应类型的客户:vip客户、普通客户、快速客户(办理如交水电费。电话费之类业务的客户)
3:异步随机生成各种类型的客户,生成各种类型用户的概率为:
VIP客户:普通客户: 快速客户 = 1 : 6 : 3
4:客户办理业务所需的时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟。)
5:各个类型客户在其对应窗口按顺序依次办理业务。
6:当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
7:随机生成客户时间间隔以及业务办理时间最大值和最小值,可以设置。
8:不要求是实现GUI,只考虑系统逻辑实现,可通过log方式展现程序运行结果。
面向对象设计:
1:客户对应由取号机器产生的号码,因为有三种客户并且彼此独立,因此应该有三个号码管理器,并且它们用多线程实现,相互独立。而现实中银行只有一个号码机器,这三个号码管理器对象有一个号码机器管理,并且整个系统中只能有一个号码机器,因此要设计成单例。
2:窗口依次叫号,即服务窗口每次找号码管理器获取当前要被服务的号码
注意:
1:关于NumberManager中的generateManager()和fetchService()必须为同步方法,由于generateManager()为客户来的时候调用,fetchService()为窗口调用,内部都有号码成员变量的访问,因此必须要同步。
2:关于单例NumberMachine,单例的实现:将构造方法定义为私有,并且定义一个公有的静态成员变量是自己类的实例,定义静态方法getInstance()返回前面的自己类的实例的静态变量。
3:要通过枚举区分窗口的type:普通、快速、VIP
---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima