android培训、java培训、期待与您交流!
(黑马程序员)银行调度系统
设计需求:
模拟现实银行业务调度系统逻辑:
1. 银行内有个业务窗口,1-4为普通窗口,5号为快速窗口,6号为VIP窗口,
2. 有三种对应需求的客户:VIP,普通,快速(交水电话费);
3. 异步随机生成各个类型的客户,比例:VIP:普通:快速 = 1:6:3;
4. 客户办理业务所需时间是有最大值和最小值,在该范围内随机设定每个VIP以及普通客户办理业务所需时间,快速客户办理业务所需时间为最小值(办理业务过程可以通过线程Sleep方式模拟);
5. 各个类型客户在其对应窗口按顺序依次办理业务。
6. 当VIP窗口和快速业务窗口没有客户等待办理业务时,则优先处理对应客户业务;
7. 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
面向对象的分析与设计:
1. 取号排队:3种客户获取各自对应的号码种类,需要3个号码产生器,但是取号的机器只有一个,则3,管理器只有一个,则使用单例设计模式;
2. 各个窗口叫号处理业务:各个窗口如何知道应该叫那一个号呢?肯定是询问号码管理器;
设计图例:
注意知识点:
1. 变量类型尽量用父类。
2. 单例设计模式三步走:1.私有化、隐藏构造函数,2 .自己私有、静态创建一个实例对象,3.暴露获取实例对象方法。
Code:
private NumberMachine(){}//
private static NumberMachine instance = new NumberMachine();
public static NumberMachine getInstance(){
return instance;
}
3. Switch的效率比if,else if高些,如果是有限的条件用switch不用if结构。switch之后括号内的表达式只能是整型(byte、short、char和int)、枚举型或字符型表达式,不能是长整型long、字符串String或其他任何类型。
Code:
public class ServiceWindow{
private CustomerType Type = CustomerType.COMMON;//CustomerType是一个枚//举型
public void start(){
Executors.newSingleThreadExecutor().execute(new Runnale(){
public void run(){
while(true){
switch(type){
case COMMON://原本引用需是CustomerType.COMMON,switc
.............//中可省略类名,别处不可以
break;
.............
}}}})
}}
4. Eclipse使用技巧:选中前一个case所有执行语句-à右击,Refactor-àExtract Method-à将一个段代码抽取成一个方法。
5. 某一个的对象要不停的处理某项业务,可以使用如下Code模型:
public class ServiceWindow{ //创建这个类
Executors.newSingleThreadExexutor().execute(new Runnable(){//创建一个线程//处理业务跟线程池方式相区分
public void run(){//处理的具体内容
while(ture){//条件设为ture使这个工作不停的运转
NumberMachine.getInstance().getCommonManager();
.......
}}},)
}
---------------------- android培训、java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima