搜索
简帛阁>技术文章>黑马程序员_java学习日记_面试题_银行业务调度系统

黑马程序员_java学习日记_面试题_银行业务调度系统

--------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------

面向对象的问题分析:

分析一个问题,首先要在脑海中构造出这么个场景,然后从面相对象的角度出发,分析这个场景中有多少个对象,这些对象哪些可以抽象成类,这个类又有什么属性,什么方法,最后要从人的角度出发去修改这段代码更加符合日常生活习惯

本案例分析

窗口:普通快速 VIP

客户:普通快速 VIP

取号机取了一个号,就代表有一个客户,所以需要一个号码管理对象,只要产生了号码就代表有客户

由于三类客户号码完全独立,因此需要三个去浩气即三个号码管理器对象

由于这三个号码管理器由同一个号码机器管理,因此号码机器要设计成单例,而号码机器负责产生这三个号码管理器的对象,每个号码管理器都需要一个产生号码(产生客户),和服务窗口叫号的一个方法

号码管理器

import java.util.ArrayList;

import java.util.List;

 

 

publicclass NumberManager {

    //上一次的号码

    intlastNum = 1;

    //排队的号码集合

    List list = new ArrayList();

    //产生新号码与取号互斥

    publicsynchronizedint generateNewManager()

    {

       //产生的号码需要存进集合

       list.add(lastNum);

       returnlastNum++;

    }

   

    //服务窗口取号与产号互斥

    publicsynchronizedint fetchServiceNumber()

    {

       //这里不能list.get(0)

       returnlist.remove(0);

    }

}

号码机器

 

publicclass NumberMechine {

 

    //将该类设计成单例,因为只有一个机器,管理三个小的系统用来产生号码

    private NumberMechine(){}

    privatestatic NumberMechine instance = new NumberMechine();

    publicstatic NumberMechine getInstance()

    {

       returninstance;

    }

    //产生不同客户号码的三个实例对象,可以理解为三类客户

    private NumberManager common = new NumberManager();

    private NumberManager quick = new NumberManager();

    private NumberManager VIP = new NumberManager();

    public NumberManager getCommon() {

       returncommon;

    }

    public NumberManager getQuick() {

       returnquick;

    }

    public NumberManager getVIP() {

       returnVIP;

    }

}

服务窗口

//服务窗口,叫号的方法时自己的

publicclass ServiceWindow {

 

    //使用枚举来确定客户类型;

    private Type type = Type.COMMON;

    //窗口号

    privateintwindowID = 1;

    //人性化输出

    String name = "第"+windowID+type+"窗口";

    publicvoid start(){

       Executors.newSingleThreadExecutor().execute(

               new Runnable(){

 

                  @Override

                  publicvoid run() {

                     while(true)

                     {

                         switch(type)

                         {

                         caseCOMMON:

                            //随机生成休息时间

                            long serviceTime = new Random().nextInt(10);

                            System.out.println(name+"任务获取中");

                            //获取产生的号码

                            Integer i = NumberMechine.getInstance().getCommon().fetchServiceNumber();

                            if(i != null){

                                try {

                                   Thread.sleep(serviceTime);

                                } catch (InterruptedException e) {

                                   e.printStackTrace();

                                }

                                System.out.println("服务ing");

                            }else{

                                try {

                                   Thread.sleep(1000);

                                   System.out.println(name+"取号失败");

                                } catch (InterruptedException e) {

                                   e.printStackTrace();

                                }

                            }

                            break;

                         caseQUICK:

                            //随机生成休息时间

                            long serviceTime1 = new Random().nextInt(10);

                            System.out.println(name+"任务获取中");

                            //获取产生的号码

                            Integer j = NumberMechine.getInstance().getQuick().fetchServiceNumber();

                            if(j != null){

                                try {

                                   Thread.sleep(serviceTime1);

                                } catch (InterruptedException e) {

                                   e.printStackTrace();

                                }

                                System.out.println("服务ing");

                            }else{

                                try {

                                   Thread.sleep(1000);

                                   System.out.println(name+"取号失败");

                                } catch (InterruptedException e) {

                                   e.printStackTrace();

                                }

                            }

                            break;

                         caseVIP:

                            //随机生成休息时间

                            long serviceTime2 = new Random().nextInt(10);

                            System.out.println(name+"任务获取中");

                            //获取产生的号码

                            Integer k = NumberMechine.getInstance().getVIP().fetchServiceNumber();

                            if(k != null){

                                try {

                                   Thread.sleep(serviceTime2);

                                } catch (InterruptedException e) {

                                   e.printStackTrace();

                                }

                                System.out.println("服务ing");

                            }else{

                                try {

                                   Thread.sleep(1000);

                                   System.out.println(name+"取号失败");

                                } catch (InterruptedException e) {

                                   e.printStackTrace();

                                }

                            }

                            break;                     

                         }

                     }

                  }

                 

              });

    }

    publicvoid setType(Type type) {

       this.type = type;

    }

    publicvoid setWindowID(int windowID) {

       this.windowID = windowID;

    }

}

客户类型枚举

 

publicenum Type {

COMMON,QUICK,VIP;

//重写toString方法用于输出客户类型名,精益求精

@Override

public String toString() {

    switch(this)

    {

    caseCOMMON:return"普通";

    caseQUICK:return"快速";

    caseVIP:return"vip";

    }

    returnnull;

}

}

总结。。

拿到一个问题分三步去做

首先分析场景,剖析对象,准确的找出对象并定义好对象需要的参数和方法

将该问题通过java语言去描述

精益求精,修改每一个细节,包括代码的编写或者枚举,泛型等新技术的应用等

android培训、java培训、java学习型技术博客、期待与您交流!面向对象的问题分析:分析一个问题,首先要在脑海中构造出这么个场景,然后从面相对象的角度出发,分析这个场景中有多少个对象,这些对
android培训、java培训、期待与您交流!1系统需求模拟实现银行业务调度系统逻辑,具体需求如下:银行内有6个业务窗口,14号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。有三种对应
android培训、java培训、期待与您交流!银行业务调度系统的项目需求1银行内有6个业务窗口,14号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。2有三种对应类型的客户:VIP客户,普
黑马程序员学习日记黑马程序员_学习日记_银行业务调度系统android培训、java培训、期待与您交流!银行业务调度系统模拟实现银行业务调度系统逻辑,具体需求如下:银行内有6个业务窗口,14号窗口为普
android培训、java培训、java学习型技术博客、期待与您交流!银行业务调度系统需求:模拟实现银行业务调度系统逻辑,具体需求如下:银行内有6个业务窗口,14号窗口为普通窗口,5号窗口为快速窗
android培训,java培训java学习型技术博客、期待与您交流!银行业务调度系统的项目需求面向对象的分析与设计l有三种对应类型的客户:VIP客户,普通客户,快速客户,异步随机生成各种类型的客户
android培训、java培训、java学习型技术博客、期待与您交流!遇到问题不要偷懒,画图有助于理解问题车辆的行驶顺序,先是直线,比如南向北,然后是左拐外南向西,其他三个方向类似除去不受控制的灯
//指定各个窗口运行的条件。publicstaticvoidmain(String[]args){//ServiceWindowwindownull;for(inti1;i//产生4个普通窗口分别为1
android培训,java培训java学习型技术博客、期待与您交流!交通灯管理系统的项目需求画图演示过程面向对象的分析与设计l每条路线上都会出现多辆车,路线上要随机增加新的车,在灯绿期间还要每秒钟减
android培训、java培训、java学习型技术博客、期待与您交流!交通灯管理系统需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:异步随机生成按照各个路线行驶的车辆。例如:由南向而来去往