黑马程序员--java小项目之银行业务调度系统(一)

2014-11-24 02:31:26 · 作者: · 浏览: 0

 ------- 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