A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.Random;
  2. import java.util.concurrent.Executors;

  3. public class ServiceWindow {
  4.         private ConsumerType type=ConsumerType.COMMON;
  5.         private int windowID = 1;
  6.        
  7.         public void setType(ConsumerType type) {
  8.                 this.type = type;
  9.         }

  10.         public void setWindowID(int windowID) {
  11.                 this.windowID = windowID;
  12.         }
  13.        
  14.         //启动服务
  15.         public void start(){
  16.                 Executors.newSingleThreadExecutor().execute(new Runnable(){
  17.                         public void run() {       
  18.                                 String windowName = windowID+"号"+type+"窗口";
  19.                                 while(true){                                       
  20.                                         service(ServiceWindow.this.type,windowName);                                       
  21.                                 }
  22.                         }                       
  23.                 });
  24.         }
  25.        
  26.         //窗口服务
  27.         public void service(ConsumerType type,String windowName) {               
  28.                 Integer number = getServiceNumber(type);                                       
  29.                 System.out.println(windowName+"正在获取"+type+"客户号码");
  30.                 if(number!=null){
  31.                         System.out.println(windowName+"正在为"+number+"号"+type+"客户服务");
  32.                         long startTime = System.currentTimeMillis();
  33.                         int serviceTime = getServiceTime(type);
  34.                         sleep(serviceTime);
  35.                         long endTime =System.currentTimeMillis();
  36.                         long costTime = (endTime - startTime)/1000;
  37.                         System.out.println(windowName+"为"+"第"+number+"号"+type+"客户完成服务,耗时"+costTime+"秒");
  38.                 }
  39.                 else{
  40.                         //如果是普通用户窗口,那么就休息
  41.                         if(type.equals(ConsumerType.COMMON)){                               
  42.                                 System.out.println(windowName+"没有取到号,休息一秒钟");                                               
  43.                                 sleep(1000);       
  44.                         }else{
  45.                         //如果是非普通用户窗口,就开始为普通用户服务,使用递归调用
  46.                                 System.out.println(windowName+"没有取到号,"+"开始为普通客户服务");       
  47.                                 service(ConsumerType.COMMON,windowName);
  48.                         }
  49.                 }
  50.         }
  51. //获得服务号码
  52.         public Integer getServiceNumber(ConsumerType type) {
  53.                 Integer number =null;
  54.                 switch(type){
  55.                 case COMMON:
  56.                         number = NumberMachine.getInstance().getCommonManager().fetchNumber();
  57.                         break;
  58.                 case EXPRESS:
  59.                         number = NumberMachine.getInstance().getExpressManager().fetchNumber();
  60.                         break;       
  61.                 case VIP:
  62.                         number = NumberMachine.getInstance().getVipManager().fetchNumber();
  63.                         break;
  64.                 }
  65.                 return number;
  66.         }       

  67. //获取服务时间
  68.         public int getServiceTime(ConsumerType type) {
  69.                 int serviceTime=0;
  70.                 switch(type){
  71.                 case COMMON:
  72.                 case VIP:
  73.                         int randomTime =Constant.MAX_SERVICE_TIME-Constant.MIN_SERVICE_TIME;
  74.                         serviceTime = new Random().nextInt(randomTime+1)+Constant.MIN_SERVICE_TIME;
  75.                         break;
  76.                 case EXPRESS:
  77.                         serviceTime =Constant.MIN_SERVICE_TIME;
  78.                         break;
  79.                        
  80.                 }
  81.                 return serviceTime;
  82.                
  83.         }
  84. //获得停滞时间
  85.         public void sleep(int sleepTime) {
  86.                 try {
  87.                         Thread.sleep(sleepTime);
  88.                 } catch (InterruptedException e) {
  89.                         // TODO Auto-generated catch block
  90.                         e.printStackTrace();
  91.                 }
  92.         }


  93. }
复制代码
张老师视频说,可以用继承来做,但我在做的时候,发现继承更麻烦(主要是vip,快速又要调用普通这块),索性进行了抽取优化,欢迎拍砖。如果有谁用继承进行了优化,希望能把代码也贴出来,互相交流~

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马