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

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

看了银行业务调度系统,更加感受到了对一个项目进行面向对象的模型抽象能力对一个项目是多么的重要,一个好的模型可以使项目大大简化

下面总结一下张老师讲得银行业务调度系统

  • 项目需求:

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

  • 项目分析:

客户:对于银行业务窗口来说,谁取号了,谁就是你的客户,所以客户就是一个号码,业务窗口需要服务的对象也就是一个号码(佩服,佩服!)所以我们只需要有一个号码产生器来产生号码即可。不同客户需要不同的的号码产生器,所以号码产生器应该有三种,对这三个号码产生器进行管理的还需要有一个号码管理器对象。

经过分析,项目中涉及到三个对象:

号码产生器:产生号码

业务窗口:办理业务

号码管理器:管理号码产生器

(我觉得这里号码管理器可以不用,把业务的类型作为号码产生器的类型,也就是一个属性,在创建号码产生器的时候指定类型即可)

  • 类图:

号码产生器(NumberManager):

generateNumber方法:生成一个新的号码(客户)

fetchNumber方法:为业务窗口提供一个获取当前需要办理业务的号码(客户)的方法

queueNumbers属性:ArrayList类型,用来存储产生的客户对象

业务窗口(ServiceWindow):

因为业务窗口需要不断地去提供服务,所以是一个线程。

type属性:指定业务窗口的类型

commonService方法:为普通客户提供服务的方法

expressService方法:为快速客户提供服务的方法

vipService方法:为VIP客户提供服务的方法

根据业务窗口的类型会去执行不同的Service方法。

号码管理器(NumberMachine):

用于创建号码产生器,由于只有一个所以使用单例。

经过简化以后这个项目就变得比较简单了,所以以后对于一个项目,不要上去就开始写代码,一定要把这个项目分析透了,不过这种面向对象的分析能力还需要不断的培养加强,量变产生质变嘛!

 

题后记:

历时一个月之久的视频终于看完了,刚开始以为视频不是很多,看着那个网页上也没几个,本来计划两个星期看完呢,结果每一个下面都是那么多,眼看着马上就要开班了,我都快hold不住了,就紧赶慢赶,晚上还加班,终于算是看完了,视频里面的知识还是挺多的,感觉自己学了不少新的知识和学习的方法,真是“学,然后知不足,然后再学”。越学越觉的自己的渺小,终于理解了乔帮主的那句话"Stay foolish,stay hungery."下面就开始准备入学测试了,希望自己能够顺利过关吧。Say a little prayer…

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

详细请查看:http://edu.csdn.net/heima

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭