黑马程序员——银行业务调度系

银行业务系统:

如果是我面试拿到这样的面试题,我想我也该慌了,这不仅仅是要求对,知识学的好,还要求会准确明了的分析实际情况。


在看了该系统要求之后,用面向对象的思想分析:其中一共包括三类客户窗口,分别为COMMON(普通客户), EXPRESS(快速客户), VIP(高级客户),这三个客户的取号都是由一台机器产出的,所以考虑使用单例设计模式。


由对系统需求的分析:开始建立类图,一共三个类,以及类中所定义的方法

(1)NumberMachine类:此类为单例设计模式的体现,把其构造方法进行私有化,而且采用到的是饿汉式加载;getCommonManger();getVipManger();getExpressManger() getInstance()


代码块体现:

public class NumberMachine {
private NumberManger commonManger = new NumberManger();
private NumberManger expressManger = new NumberManger();
private NumberManger vipessManger = new NumberManger();

public NumberManger getCommonManger() {
return commonManger;
}

public NumberManger getExpressManger() {
return expressManger;
}


public NumberManger getVipManger() {
return vipessManger;
}


private NumberMachine() {
// TODO Auto-generated constructor stub
}

public static NumberMachine getInstance() {

return instance;

}


private static NumberMachine instance = new NumberMachine();


}

 (2)NumberManger 类:此用来管理号码

 generateNewManager();用来返回上一个号码。fetchServiceNumber() ;返回下一个该服务的号,这两个方法要用 synchronized ,来互斥。

代码块:

public class NumberManger {


private int lastNumber = 1;
private List<Integer> queueNumber=new ArrayList<Integer>();

// synchronized ,来互斥。
public synchronized Integer generateNewManager() {
queueNumber.add(lastNumber);
return lastNumber++;

}

// synchronized ,来互斥
public synchronized Integer fetchServiceNumber() {
Integer number =null;
if(queueNumber.size()>0){
return queueNumber.remove(0);
}
return number;
}
}

(3)ServiceWindow :为服务方法类,分别有三种服务模式

start() ; commonService() ;expressService() ;vipService() 

private void commonService() {
String windowName="第"+windowId+"号"+type+"窗口;";
System.out.println("正在获取任务");
Integer number = NumberMachine.getInstance()
.getCommonManger().fetchServiceNumber();
if (number != null) {
long beginTime = System.currentTimeMillis();

int maxRand =Constants.MAX_SERVICE_TYPE-Constants.MIN_SERVICE_TYPE;
long serviceTime =new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TYPE;
try {
Thread.sleep(serviceTime);

} catch (InterruptedException e) {
e.printStackTrace();

}
long costTime=System.currentTimeMillis()-beginTime;


System.out.println(windowName+"为第"+number+"个"+type+"客户完成,耗时"+costTime/1000+"秒");
}else{

System.out.println("没有取到任务,先休息一秒");

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值