------- android培训、java培训、期待与您交流! ----------

根据项目的需求结合实际情况我们可以设计出几个重要的几个类:
叫号的机浓ky"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcgLS0+Ck51bWJlck1hY2hpbmNlKLWlwP3J6LzGKTxicj4Ku/rG99bQtcS6xcLrudzA7cb3IAotLT4gTnVtYmVyTWFuYWdlcijI/dbWusXC67ncwO3G9yk8YnI+Crf+zvG1xLSwv9ogLS0+CldpbmRvdyjI/dbWsrvNrLXEtLC/2ik8YnI+Cjxicj4KPGJyPgq0073QusW1xLv6xvfW0M7Sw8e/ydLUu/HIoc/g06a1xLrFwuu53MDtxvejrLrFwuu53MDtxve+39PQzO2807rNyKGz9rrFwuu1xLmmxNyjrLSwv9rQ6NKqtffTw7rFwuu53MDtxve1xLe9t6jIobP2usXC66OssqLOqs/gttTTprXEv827p8zhuam3/s7xoaM8YnI+CjwvcD4KPHA+PGJyPgo8L3A+CjxwPs/Cw+bKx8/uxL+1xLT6wuujujwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">package cn.itcast.Bank; /* * 号码机器类 * * 机器只有一个,机器类应该设计成单例,可以通过机器的对象获取不同的号码管理器 * */ public class NumberMachine { private static NumberMachine numberMachine = new NumberMachine(); private NumberManager commonManager = new NumberManager(); private NumberManager quickManager = new NumberManager(); private NumberManager vipManager = new NumberManager(); private NumberMachine() { } public static NumberMachine getInstance() { return numberMachine; } public NumberManager getCommonManager() { return commonManager; } public NumberManager getQuickManager() { return quickManager; } public NumberManager getVipManager() { return vipManager; } }
package cn.itcast.Bank;
import java.util.ArrayList;
import java.util.List;
/*
* 号码管理器类
*
* 负责管理号码,即负责号码的生成和取出
*
*/
public class NumberManager {
private int lastNumber = 1;
private List
numberList = new ArrayList
(); /* * 由于不同的线程在操作下面的两个方法, 而这两个方法中涉及到共同数据, 所以应该加锁 */ // 添加号码 public synchronized Integer generateNewManager() { numberList.add(lastNumber++); int currentNumber = lastNumber - 1; return currentNumber; } // 取出号码 public synchronized Integer fetchNumber() { if (numberList.size() > 0) return numberList.remove(0); return null; } }
package cn.itcast.Bank;
import java.util.Random;
import java.util.concurrent.Executors;
/*
* 服务窗口类
*
* 负责从号码管理器获取号码,叫号,并为客户服务
*/
public class Window {
private int windowId;
private WindowType windowType;
public void setWindowId(int windowId) {
this.windowId = windowId;
}
public void setWindowType(WindowType windowType) {
this.windowType = windowType;
}
public Window(int windowId, WindowType windowType) {
this.windowId = windowId;
this.windowType = windowType;
}
public void commonServer(WindowType windowType) {
// 取出号码
Integer number = NumberMachine.getInstance().getCommonManager()
.fetchNumber();
System.out.println(windowType.toString() + "窗口" + windowId + "正在获取任务");
if (number != null) {
System.out.println(windowType.toString() + "窗口" + windowId + "开始为"
+ number + "号" + windowType + "客户服务");
long beginServer = System.currentTimeMillis();
int difference = Constants.MAX_SERVER_TIME
- Constants.MIN_SERVER_TIME;
int millis = ((new Random().nextInt(difference) + 1) + Constants.MIN_SERVER_TIME);
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
long endServer = System.currentTimeMillis();
System.out.println(windowType.toString() + "窗口" + windowId + "为"
+ number + "号" + windowType + "客户结束服务,耗时"
+ (endServer - beginServer) / 1000 + "秒");
} else {
System.out