黑马程序员 银行业务调度系统
2013-12-17 11:52
423 查看
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------面向对象设计:1.定义一个NumberManager类 用于管理客户服务号码 属性:int lastNumber 用于保存上一个客户号码List<Integer> queueNumber 用于存储客户队列的集合方法:Integer generateNewNumber() 将客户号码加入排队队列 Integer fecthServiceNumber() 用于返回队列第一位的客户号代码实现:
package com.tiheima.bank;import java.util.ArrayList; import java.util.List;public class NumberManager { private int lastNumber = 1; private List<Integer> queueNumber =new ArrayList<Integer>(); public synchronized Integer generateNewNumber(){ queueNumber.add(lastNumber); return lastNumber++; } public synchronized Integer fecthServiceNumber(){ Integer number = null; if(queueNumber.size()>0) number = queueNumber.remove(0); return number; }}
2,定义一个NumberMachine类 做为取号机管理三个号码管理器 设计为单例模式
属性(分别为三个类型的号码管理器):NumberManager commonManager NumberManager expressManager NumberManager vipManager
方法:三个getter方法分别获得三个类型的号码管理器
代码实现:
package com.tiheima.bank;public class NumberMachine { private NumberManager commonManager = new NumberManager(); private NumberManager expressManager = new NumberManager(); private NumberManager vipManager = new NumberManager(); public NumberManager getCommonManager() { return commonManager; } public NumberManager getExpressManager() { return expressManager; } public NumberManager getVipManager() { return vipManager; } private NumberMachine(){}; public static NumberMachine getNumberchine(){ return instance; } private static NumberMachine instance = new NumberMachine(); }
3,设计一个ServiceWindow类,作为窗口
属性:CustomerType type 窗口类型
int windowId 窗口编号
方法:start() 内建一个线程,根据窗口类型循环调用窗口服务方法
三个窗口服务方法分别用于普通,快速,vip窗口
代码实现:
package com.tiheima.bank;import java.util.Random;import java.util.concurrent.Executors;public class ServiceWindow {private CustomerType type = CustomerType.COMMON;private int windowId = 1;public void setType(CustomerType type) {this.type = type;}public void setWindowId(int windowId) {this.windowId = windowId;}public void start(){Executors.newSingleThreadExecutor().execute(new Runnable(){public void run(){while(true){switch(type){case COMMON:commomService();break;case EXPRESS:expressService();break;case VIP:vipService();break;}}}});}private void commomService(){String windowName = "第"+windowId+"号"+type+"窗口";System.out.println(windowName+"正在获取普通任务");Integer serviceNumber = NumberMachine.getNumberchine().getCommonManager().fecthServiceNumber();if(serviceNumber!=null){System.out.println(windowName+"开始为第"+serviceNumber+"号普通客户服务");int maxRandomTime = Constants.MAX_SERVICE_TIME-Constants.MIN_SERIVCE_TIME;int serviceTime = new Random().nextInt(maxRandomTime)+1+Constants.MIN_SERIVCE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"号普通客户的服务,耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+"没有获取到任务,正在空闲一秒");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private void expressService(){String windowName = "第"+windowId+"号"+type+"窗口";System.out.println(windowName+"正在获取快速任务");Integer serviceNumber = NumberMachine.getNumberchine().getExpressManager().fecthServiceNumber();if(serviceNumber!=null){System.out.println(windowName+"开始为第"+serviceNumber+"号快速客户服务");int serviceTime =Constants.MIN_SERIVCE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"快速客户的服务,耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+"没有获取到快速任务");commomService();}}private void vipService(){String windowName = "第"+windowId+"号"+type+"窗口";System.out.println(windowName+"正在获取VIP任务");Integer serviceNumber = NumberMachine.getNumberchine().getVipManager().fecthServiceNumber();if(serviceNumber!=null){System.out.println(windowName+"开始为第"+serviceNumber+"号VIP客户服务");int maxRandomTime = Constants.MAX_SERVICE_TIME-Constants.MIN_SERIVCE_TIME;int serviceTime = new Random().nextInt(maxRandomTime)+1+Constants.MIN_SERIVCE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"VIP客户的服务,耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+"没有获取到VIP任务");commomService();}}}
4,设计一个MainClass类 创建6个窗口 创建3个定时器定时创建3种客户号码 运行程序
代码实现:
package com.tiheima.bank;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class MainClass { /*** @param args*/public static void main(String[] args) {for (int i = 1; i < 5; i++) {ServiceWindow window = new ServiceWindow();window.setWindowId(i);window.start();}ServiceWindow expressWindow = new ServiceWindow();expressWindow.setType(CustomerType.EXPRESS);expressWindow.start();ServiceWindow vipWindow = new ServiceWindow();vipWindow.setType(CustomerType.VIP);vipWindow.start();Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){Integer serviceNumber = NumberMachine.getNumberchine().getCommonManager().generateNewNumber();System.out.println("第"+serviceNumber+"号普通客户正在等待服务");}},0,Constants.COMMON_TIME,TimeUnit.SECONDS);Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){Integer serviceNumber = NumberMachine.getNumberchine().getExpressManager().generateNewNumber();System.out.println("第"+serviceNumber+"号快速客户正在等待服务");}},0,Constants.COMMON_TIME*2,TimeUnit.SECONDS);Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){Integer serviceNumber = NumberMachine.getNumberchine().getVipManager().generateNewNumber();System.out.println("第"+serviceNumber+"号VIP客户正在等待服务");}},0,Constants.COMMON_TIME*6,TimeUnit.SECONDS); }}----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员_二十五 【银行业务调度系统】
- 黑马程序员_(7K面试题)银行业务调度系统
- 《黑马程序员》--银行业务调度系统
- 黑马程序员--JAVA银行业务调度系统的学习
- 黑马程序员_银行业务调度系统
- 黑马程序员-银行业务调度系统
- 黑马程序员-博客 (9) 张孝祥-7K月薪之二_银行业务调度系统
- 黑马程序员——银行业务调度系统
- 黑马程序员------7k月薪面试题-银行业务调度系统
- 黑马程序员_7K月薪面试题之_银行业务调度系统
- 黑马程序员—银行业务调度系统
- 黑马程序员 银行业务调度系统
- 黑马程序员技术博客之银行业务调度系统学习笔记
- 黑马程序员_银行业务调度系统
- 黑马程序员------- 银行业务调度系统 -------
- 黑马程序员-银行业务调度系统
- 黑马程序员---七千面试题之银行业务调度系统
- 黑马程序员 <银行业务调度系统>
- 黑马程序员---银行业务调度系统的总结与分析
- 黑马程序员——银行业务调度系统学习笔记