黑马程序员Java学习-银行业务调度系统总结
来源:互联网 发布:概率中a的算法 编辑:程序博客网 时间:2024/06/04 18:05
---------------------- android培训、java培训、期待与您交流! ----------------------
传说中的银行业务调度系统又重出江湖啦!
张老师说这句话说了很多次了,由此可见,这道题以后面试时是十分有用的,下面来总结一下这节里面学习的内容:
我们来用面向对象的分析与设计,分析其中有多少类,以及多少对象,和他们之间的关系。
银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
要进行面向对象的程序设计,一定要深入了解你要进行模拟的系统的各个功能流程,这样你才能够设计出好的面向对象设计。
代码如下:
package com.isoftstone.interview.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 generatorNewManager(){//自动生成号码
queueNumber.add(lastNumber);
return lastNumber++;
}
public synchronized Integer fetchNumberServiceNumber(){
Integer number=null;
if(queueNumber.size()>0){
number=queueNumber.remove(0);//取走队首的号码
}
return number;
}
}
package com.isoftstone.interview.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(){}
private static NumberMachine instance=new NumberMachine();
public static NumberMachine getInstance(){
return instance;
}
}
package com.isoftstone.interview.bank;
public class Constants {
public static int MAX_SERVICE_TIME=10000;
public static int MIN_SERVICE_TIME=1000;
public static int COMMON_CUSTOMER_INTERVAL_TIME=1;//普通客户
}
package com.isoftstone.interview.bank;
public enum CustomerType {
COMMON, EXPRESS, VIP;
public String toString() {
switch (this) {
case COMMON:
return "普通";
case EXPRESS:
return "快速";
case VIP:
return name();
}return null;
}
}
package com.isoftstone.interview.bank;
import java.util.Random;
import java.util.concurrent.Executors;
public class ServiceWindow {
private CustomerType type=CustomerType.COMMON;
public void setType(CustomerType type) {
this.type = type;
}
public void setWindowId(int windowId) {
this.windowId = windowId;
}
private int windowId=1;
public void start(){
//使用线程,启动吧//线程池,线程池在里面找到一个空闲的线程
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
while(true){
switch (type) {//switch(n)也可以使用枚举值,
case COMMON:
commonService();
break;
case EXPRESS:
expressService();
break;
case VIP:
vipService();
break;
}
NumberMachine.getInstance().getCommonManager();
}
}
});
}
private void commonService() {
String windowName="第"+windowId+"号"+type+"窗口";
Integer number=NumberMachine.getInstance().getCommonManager().fetchNumberServiceNumber();
System.out.println(windowName+"正在获取任务");
if(number!=null){
System.out.println(windowName+"为第"+number
+"个"+"普通"+"客户服务");
long beginTime= System.currentTimeMillis();
int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;//9000
long serviceTime=new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long costTime= System.currentTimeMillis()-beginTime;
System.out.println(windowName+"为第"+number
+"个"+"普通"+"客户完成服务,耗时"
+(costTime/1000)+"秒");
}else{
System.out.println(windowName+"没有取到任务,先休息1秒钟!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void expressService() {
String windowName="第"+windowId+"号"+type+"窗口";
Integer number=NumberMachine.getInstance().getExpressManager().fetchNumberServiceNumber();
System.out.println(windowName+"正在获取任务");
if(number!=null){
System.out.println(windowName+"为第"+number
+"个"+type+"客户服务");
long beginTime= System.currentTimeMillis();
//int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;//9000
//long serviceTime=new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(Constants.MIN_SERVICE_TIME);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long costTime= System.currentTimeMillis()-beginTime;
System.out.println(windowName+"为第"+number
+"个"+type+"客户完成服务,耗时"
+(costTime/1000)+"秒");
}else{
System.out.println(windowName+"没有取到任务,先休息1秒钟!");
commonService();//express没有客户的时候,处理普通客户
}
}
private void vipService() {
String windowName="第"+windowId+"号"+type+"窗口";
Integer number=NumberMachine.getInstance().getVipManager().fetchNumberServiceNumber();
System.out.println(windowName+"正在获取任务");
if(number!=null){
System.out.println(windowName+"为第"+number
+"个"+type+"客户服务");
long beginTime= System.currentTimeMillis();
int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;//9000
long serviceTime=new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long costTime= System.currentTimeMillis()-beginTime;
System.out.println(windowName+"为第"+number
+"个"+type+"客户完成服务,耗时"
+(costTime/1000)+"秒");
}else{
System.out.println(windowName+"没有取到任务!");
commonService();//vip没有客户的时候,处理普通客户
}
}
}
package com.isoftstone.interview.bank;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class MainClass {
public static void main(String[] args) {
for(int i=1;i<5;i++){
ServiceWindow commonWindow=new ServiceWindow();
commonWindow.setWindowId(i);
commonWindow.start();
}
ServiceWindow expressWindow=new ServiceWindow();
expressWindow.setType(CustomerType.EXPRESS);
expressWindow.start();
ServiceWindow vipWindow=new ServiceWindow();
vipWindow.setType(CustomerType.VIP);
vipWindow.start();
//异步随机生成各种类型的客户,生成各种类型用户的概率比例vip:comm:express=1:6:3
//普通
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable(){
@Override
public void run() {
//叫号
Integer number=NumberMachine.getInstance().getCommonManager().generatorNewManager();
System.out.println("第"+number+"号普通客户正在等待服务!");
}
},
0,//过多长时间来
Constants.COMMON_CUSTOMER_INTERVAL_TIME,//
TimeUnit.SECONDS);//确定来的时间
//快速
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable(){
@Override
public void run() {
//叫号
Integer number=NumberMachine.getInstance().getExpressManager().generatorNewManager();
System.out.println("第"+number+"号普通客户正在等待服务!");
}
},
0,//过多长时间来
Constants.COMMON_CUSTOMER_INTERVAL_TIME*3,//
TimeUnit.SECONDS);//确定来的时间
//vip
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable(){
@Override
public void run() {
//叫号
Integer number=NumberMachine.getInstance().getVipManager().generatorNewManager();
System.out.println("第"+number+"号vip客户正在等待服务!");
}
},
0,//过多长时间来
Constants.COMMON_CUSTOMER_INTERVAL_TIME*6,//
TimeUnit.SECONDS);//确定来的时间
}
}
- 【黑马程序员】银行业务调度系统学习总结
- 黑马程序员Java学习-银行业务调度系统总结
- 黑马程序员---银行业务调度系统学习总结与心得
- 黑马程序员—银行业务调度系统学习总结
- 黑马程序员_银行业务调度系统学习总结
- 黑马程序员—银行业务调度系统学习总结
- 黑马程序员--银行业务调度系统总结
- 黑马程序员-----银行业务调度系统总结*
- 《黑马程序员》 银行业务调度系统回顾总结
- 黑马程序员java学习<基础加强>—银行业务调度系统
- 黑马程序员-java学习笔记-银行业务调度系统
- 黑马程序员---java学习笔记之银行业务调度系统
- 黑马程序员-java学习笔记之银行业务调度系统。
- 黑马程序员 JAVA学习笔记 ——银行业务调度系统
- 黑马程序员--JAVA银行业务调度系统的学习
- 黑马程序员 java学习笔记——银行业务调度系统
- 黑马程序员-Java基础学习之银行业务调度系统
- 黑马程序员:银行业务调度系统学习
- 关于php curl上传文件出现(26)failed creating formpost data的解决方案
- Android应用中通过AIDL机制实现进程间的通讯实例
- 关于正则匹配不到大数据的解决办法
- POJ 1007 DNA Sorting (简单)
- Non-terminating decimal expansion; no exact representable decimal result.
- 黑马程序员Java学习-银行业务调度系统总结
- Android-opencv之CVCamera
- oracle data block 的物理结构
- zju 1008 dfs
- 一千年的沉睡作者深秋葉蕭蕭
- Flash as 写一个HashMap
- c#如何限制程序内存使用的大小
- 第十七章、程序管理与 SELinux 初探 (鸟哥私房菜)
- Objective-C与JavaScript的交互