`
AlexShaw
  • 浏览: 12876 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

 
阅读更多

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

面向对象的问题分析:

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

本案例分析

窗口:普通快速 VIP

客户:普通快速 VIP

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

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

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

号码管理器

import java.util.ArrayList;

import java.util.List;

 

 

publicclass NumberManager {

    //上一次的号码

    intlastNum = 1;

    //排队的号码集合

    List<Integer> list = new ArrayList<Integer>();

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

    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语言去描述

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics