银行业务调度系统
平时,我们先大概都去过银行取过款或者存过款,稍微的大一点的银行都会有一套管理系统。
word中要求实现的功能大体上和现实中一样。通过学习视频,来归纳一下这个系统怎么做的,都要注意些什么。
1、要提取类的对象和信息
根据实际中的经验,我们提取出客户、取票机、控制台三个对象。
2、程序中客户是怎么产生的?
我们知道,银行里面有空调,特别是夏天的时候,里面可能会有很多人,大部分人是去办理业务的,我们称之为客户,
就是我们要找的对象,但是还有一部分人是去吹凉的,他们肯定不能算作是客户,这时我们怎么才能分辨呢?
我们用到了取号机这个对象,取号机里面产生一张票的话,就相当于产生了一个客户,这时就可以让这个客户放进
“队伍”里面了。
3、“叫号”
叫号怎么叫呢?是客户跑去问号么?说,轮到我了么?时时刻刻地去问,有N多个客户的话,N多个客户也同时跑去问,
这下窗口就挤爆了!所以不能让客户自己跑去问号,而是让窗口去一次叫号,客户听到了窗口在叫自己的号码,就会
跑到对应的窗口办理业务。
4、此时系统里面的一些结构就比较清楚了
Numbermanager 拥有有关number的所有方法
NumberMachine 拥有Vip、快速、普通的管理器
ServiceWindow 拥有处理业务的方法
5、NumberManger
public class NumberManager {
private int lastNumber = 0;
private List queueNumbers = new ArrayList();
//这里不用ArrayList是面向接口编程,以后new LinkedList也可以,方便
public synchronized Integer generateNewNumber(){
queueNumbers.add(++lastNumber); //添加这个数
return lastNumber;
}
public synchronized Integer fetchNumber(){
if(queueNumbers.size()>0){
return (Integer)queueNumbers.remove(0);//remove()方法返回的是一个集合里的一个元素
}else{
return null;
}
}
6、NumberMachine
private NumberMachine(){} //管理三个号码的机器
private static NumberMachine instance = new NumberMachine(); |
public static NumberMachine getInstance(){ |---->单例,单例对象确保里面只有一个实例,上次学的枚举里面就有单例
return instance; | 要用static修饰
}
//三个成员变量
private NumberManager commonManager = new NumberManager(); //普通客户
private NumberManager expressManager = new NumberManager(); //快速客户
private NumberManager vipManager = new NumberManager(); //vip客户
public NumberManager getCommonManager() {
return commonManager;
}
public NumberManager getExpressManager() {
return expressManager;
}
public NumberManager getVipManager() {
return vipManager;
}
7、ServiceWindow
ServiceWindow类功能是叫号,那么他的叫号功能是调用别人的还是他自己就具有的呢?
要是他自己就具有的,要怎么实现呢?
在类里面写一个start()创建一个线程池运行commonService()、expressService()、vipService()这些方法。