---------------------- android培训、java培训、期待与您交流! ----------------------
银行业务调度系统需求:1、银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。2、有三种对应类型的客户:VIP客户,普通客户,快速客户。3、VIP客户以及普通客户办理业务所需的时间有最大值和最小值,快速客户办理业务所需时间为最小值,三种客户比例为VIP客户 :普通客户 :快速客户 = 1 :6 :3。4、当VIP窗口和快速窗口没有客户等待可以为普通客户服务。
系统分析:首先来银行的客户分为三类:普通客户,快速客户,VIP客户,异步随机生成各种类型的客户,然后去相对应的窗口办理业务。每个类型的客户拿到的号码都是独立的,号码管理器进行管理就需要三个,这样用一个发号机器来管理三个号码管理器,客户领号时根据自己的类型选择不同的号码管理器取得号码,这样才更接近于现实。这时可以大致确定下几个类,客户类、号码管理器类、发号机器类。在客户来银行办理业务时,他是要等到业务窗口喊号才可以到窗口办理业务,而喊号的依据便是发号机器那里得到的已经发出去的号码。
部分的代码实现:
首先将客户类
public enum CustomerType{COMMON.EXPRESS,VIP;}
定义这个号码管理器的类
public class NumberManager{
private int lastNumber=1;//定义一个用存储上一个客户号码的成员变量
private List<Integer> list=new ArrayList<Integer>();//用于存储所有等待服务的客户队列
public synchronized Integer generateNumber(){//定义产生一个新号码的方法
list.add(lastNumber);
return lastNumber++;
}
public synchronized Integer getServiceNumber(){//获取等待客户队列的即将被服务的号码
renturn list.remove(0);
}
}
之后定义一个发号机器的类来管理不同的号码管理器。
public class NumberMachine{
private NumberManger commonManager=new NumberManager();//定义三个成员变量分别指向三个manager对象
private NumberManger expressManager=new NumberManager();
private NumberManger vipManager=new NumberManager();
public NumberManager getCommonManager(){//定义三个get方法返回对应的NumberManager对象。
return commonManager;
}
public NumberManager getCommonManager(){
return expressManager;
}
public NumberManager getCommonManager(){
return vipManager;
}
private NumberMachine(){
public static NumberMachine instance=new NumberMachine();//将NumberMachine设计成单例public static NumberMachine getInstance(){
return instance;
]
}
}
定义窗口类,定义一个start()方法
使用Executors.newSingleThreadExecutor().execute{new Runnable(){
public void run(){
while(true){
switch(type){
case COMMON
//调用普通窗口喊号方法
case EXPRESS
//调用快速窗口喊号方法
case VIP
//调用VIP窗口喊号方法}}} }}
听张老师讲的时候,还是能紧跟着思路把整个系统的条理弄明白,但是等到自己写博客的时候就有些丢三落四的情况,还有些能想到但是该怎么操作却不会了。在分析设计后一些东西就被我华丽丽的漏掉了,而且思维还是需要锻炼,下午写这篇日记的时候,中间一断,回来就找不到头绪了,磨蹭了很久才完成,尴尬~