----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
昨天学习了张孝祥老师的银行业务调度系统视频,今天回顾一下看完视频后不解的地方和张老师提及的代码优化。
1. 产生1000 –10000的随机数
我的想法是:
有一个最小值Constants.MIN_SERVICE_TIME是1000,
最大值Constants.MIN_SERVICE_TIMEmaxRand是10000,maxRand是9000,
先产生0 – 9000的随机数:newRandom().nextInt(maxRand + 1);
再加上最小值,这样就产生了1000– 10000的随机数。
最后的代码:
long serveTime = new Random().nextInt(maxRand+ 1) + Constants.MIN_SERVICE_TIME;
2.ServiceWindow类代码优化
张老师在视频中提及为了提高代码的复用性,在ServiceWindow 中抽出重复代码的方法,
我的思路代码是:
package com.isoftstone.interview.bank;
import java.util.Random;
import java.util.concurrent.Executors;
public class ServiceWindow2 {
private CustomerType type;
private intwindowID;
private longserviceTime;
private Integer number;
//窗口开始提供服务
public voidstart(){
Executors.newSingleThreadExecutor().execute(
new Runnable(){
public void run() {
while(true){
service();
}
}
}
);
}
//*抽出窗口的服务方法,普通窗口服务普通客户,快速窗口和vip窗口在没有对应客户时服务普通客户
private voidservice() {
String windowName = "第" + windowID+ "号" + type +"窗口";
number =getNumber();
System.out.println(windowName + "正在获取任务");
if(number!=null){
System.out.println(windowName + "正在为第" + number + "个" + type + "客户服务");
serving(windowName);
}else{
System.out.println(windowName + "没有取到" + type + "任务");
if(type==CustomerType.COMMON){
rest();
}else{
offerOtherTypeService();
}
}
}
//*抽象出快速窗口和vip窗口提供普通服务的方法
private voidofferOtherTypeService(){
String windowName = "第" + windowID+ "号" + type +"窗口";
number =NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
System.out.println(windowName + "正在获取任务");
if(number!=null){
System.out.println(windowName + "正在为第" + number + "个普通客户服务");
serving(windowName);
}else{
System.out.println(windowName + "没有取到普通任务");
rest();
}
}
//*抽出休息的方法
private voidrest() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//*抽出服务进行中的方法
private voidserving(String windowName) {
long beginTime = System.currentTimeMillis();
serviceTime = serveTime();
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
long costTime = System.currentTimeMillis()- beginTime;
System.out.println(windowName + "为第" + number+ "个普通客户完成服务,耗时" + costTime/1000 + "秒");
}
//*抽象出获得号码方法
public Integer getNumber(){
switch(type){
case COMMON :
return NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
case FAST :
return NumberMachine.getInstance().getFastManager().fetchServiceNumber();
case VIP :
return NumberMachine.getInstance().getVipManager().fetchServiceNumber();
}
return null;
}
//*抽象出服务时间的方法
public longserveTime(){
int maxRand = Constants.MAX_SERVICE_TIME- Constants.MIN_SERVICE_TIME;
serviceTime = newRandom().nextInt(maxRand + 1) + Constants.MIN_SERVICE_TIME;
switch(type){
case COMMON :
return serviceTime;
case FAST :
return Constants.MIN_SERVICE_TIME;
case VIP :
return serviceTime;
}
return 1;
}
}