银行业务调度系统模拟实现

看到张孝祥老师的Java面试题,原文见(http://www.it315.org/netclass/bank.html),忍不住手痒,用C#简单写了个

交通灯那题看得烦,回头再研究下,银行业务调度排号的现在比较多见,比较简单,估计月薪4K就可以了,实现如下:

 

首先看看需求:

 


分析一下类的设计
对于业务窗口类,我可以认为是3种不同的银行员工(Employee),三种不同的银行员工都能够完成以下两件事情,从队列获取客户(GetCustomer),办理业务(DoBusiness)。
对于客户(Customer),三种不同客户暂时不对其特征进行任何抽象,仅认为所有的客户都有一个需要办理的业务时间(BusinessTime)而已,当然我们要利用CustomerFactory生产他们,并把他们放入到三个不同的队列中去。

最后,我们创建Bank类用于保存三个客户队列,为了简单起见,我们创建三个全局静态队列

现在业务逻辑就比较清晰了
Bank银行仅负责对三个客户队列进行维护
Customer仅仅是数据而已,保存在三个队列中
CustomerFactory是一个单独的工厂,用于随机生产不同的客户并把其加入到不同的队列中,这需要一个单独的线程
Employee是业务窗口,仅负责不停地查询三个队列,获取客户,然后针对客户办理业务,每个Employee实例都需要一个单独的线程

首先是客户类Customer

 

然后是银行类:

 

为了防止队列异常和多线程冲突,简单地封装了对三个队列的获取和加入方法。

其中的Info类是输出信息用的,比较简单,一边日后重构用的

 

利用一个简单工厂生产客户Customer

 

普通业务窗口

 

 

VIP窗口和快速窗口继承自普通窗口,仅重写GetCustomer方法即可

 

调用就很简单了

 

 

以上Vs2008 framework3.5通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值