随机生成各种类型客户。
vip客户:普通客户:快速客户=1:6:3
6个业务窗口,1-4号为普通,5号为快速,6号为VIP窗口。
5 、6号在没有客户时,可以办理普通客户。
面向对象的分析和设计:
号码管理器产生客户,所以需要号码管理器。彼此独立产生。
号码管理器需要是单例设计。
快速客户以及VIP客户的代码和普通客户代码几乎一致,只需修改部分地方,在这不列出。
vip客户:普通客户:快速客户=1:6:3
6个业务窗口,1-4号为普通,5号为快速,6号为VIP窗口。
5 、6号在没有客户时,可以办理普通客户。
面向对象的分析和设计:
号码管理器产生客户,所以需要号码管理器。彼此独立产生。
号码管理器需要是单例设计。
取号机的代码实现:
public class NumberMachine {
private NumberManager commonManager=new NumberManager();
public NumberManager getCommonManager() {
return commonManager;
}
public NumberManager getExpressManager() {
return expressManager;
}
public NumberManager getVipManager() {
return VipManager;
}
private NumberManager expressManager=new NumberManager();
private NumberManager VipManager=new NumberManager();
private NumberMachine(){}
public static NumberMachine getInstance(){//单例设计模式。
return instance;
}
private static NumberMachine instance=new NumberMachine();
}
顾客的枚举实现:
public enum CustomerType {
COMMON,EXPRESS,VIP;
public String toString(){
switch(this){
case COMMON:
return"普通";
case EXPRESS:
return"快速";
case VIP:
return name();
}
return null;
}
}
普通客户的实现
private void commeService() {
String windowName="第"+windowId+"号"+type+"窗口";
System.out.println("");
Integer number=NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
if(number!=null){
long beginTime=System.currentTimeMillis();
long costTime=System.currentTimeMillis()-beginTime;
int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
long serveTime=new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
try{
Thread.sleep(serveTime);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(windowName+"为第"+number+"个"+type+"客户服务,耗时"+costTime);
}else{
System.out.println("没有取到任务。休息一秒");
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}};
快速客户以及VIP客户的代码和普通客户代码几乎一致,只需修改部分地方,在这不列出。