看到张孝祥老师的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通过