本帖最后由 王林涛 于 2013-8-6 19:17 编辑
package com.isoftstone.interview.bank;
import java.util.Random;
import java.util.concurrent.Executors;
/*
* 建立服务窗口类
*/
public class ServiceWindow {
//号码管理器所对应的窗口不确定,所以要定义一个变量,这时就需要设置一个枚举类.
private CustomerType type = CustomerType.COMMON;
//定义窗口号码
private int WindowId = 1;
//获取其set方法,来设置窗口
public void setType(CustomerType type) {
this.type = type;
}
public void setWindowId(int windowId) {
WindowId = windowId;
}
//服务窗口开始方法,这里是一个线程
public void start(){
//建立线程池,这里只需要一个线程,然后调用执行方法,传入线程对象new Runnable
Executors.newSingleThreadExecutor().execute(new Runnable(){
//Runnble对象实现了Runnable接口,并覆盖run方法
public void run(){
//覆盖run方法就是为了不停的取号
while(true){
// if(type == CustomerType.COMMON)
// //然后去找机器要一个号码管理器
// NumberMachine.getInstance().getCommonManager();
// else if(type == CustomerType.EXPRESS){
// NumberMachine.getInstance().getExpressManager();
// }
// else if(type == CustomerType.VIP){
// NumberMachine.getInstance().getVipManager();
// }
// break;
//这里写成Switch语句,switch语句效率比if else if 语句效率高
switch(type){
case COMMON://一般写枚举都要加上前缀,就这个地方特殊 应该写成:case Customer.CoMMON;
//定义一个变量windowName
String windowName = "第"+WindowId+"号"+type+"窗口";
System.out.println("正在获取任务");
//当拿到所属客户类型的号码后,然后服务窗口开始叫号
Integer number = NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
if(number != null){
//开始时间
long beginTime = System.currentTimeMillis();
//定义最大随机时间
int maxRandomTime = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;
/*
* Random此类的实例用于生成伪随机数流.
* 建立随机数对象new Random()
* 方法nextInt()是指返回下一个伪随机数.
*/
//让随机数的范围定义在 1 - 10000之间.
long serviceTime = new Random().nextInt(maxRandomTime)+1+Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//服务消耗时间
long costTime = System.currentTimeMillis() - beginTime;
System.out.println(windowName+"为"+number+"个"+type+"客户完成服务,耗时"+costTime/1000+"秒");
}else{
System.out.println("没有取到任务,先休息一秒钟");
}
break;
case EXPRESS:
break;
case VIP:
break;
}
}
}
});
}
}
------------------------------------------------------------------------------------------------------------------------------------
此为张孝祥老师银行调度系统中的课程内容,怎么把上述类抽取称为commonService(普通客户服务)类.
抽取的时候主要是选择那一块内容?我见张老师抽取后是不包括内部类的,而我抽取后,怎么包括了内部类.求解决!!!
谢谢!
|