黑马程序员---银行业务调动系统 学习笔记

原创 2012年03月21日 04:49:07
---------------------- android培训java培训、期待与您交流! ----------------------

银行业务调动系统:    

系统需求::

           <1>. 一共有6个窗口,1到4号是普通窗口,5号是快速窗口,6号VIP窗口; 分别对应三种类型客户,普通的客户, 快速的客户, VIP的客户;

           <2>. 随机生成各种类型客户, 生成的概率比例是, 6 : 3 :1;

           <3>. 办理业务时间有最大值和最小值, VIP客户和普通客户需要服务的时间在允许范围内, 随机设定的, 快速客户是最小值

          <4>. 具体服务的逻辑和现实生活是相同的;     

1. 具体思路:

          <1>. 生成客户: 每一个银行都有一个取号器, 取号器可以生产三种类型客户, 每产生一个号, 就等于生产了一个相应类型的客户, 每种类型客户号码编排都是独立的;        

<2>. 银行办理过程: 业务办理由窗口叫号来完成, 办理业务不是客户自己去办理, 是等到某一个窗口叫到自己的号码时, 就等于开始服务了, 所以要有一个叫号器;

          <3>. 窗口叫号分析: 叫号器要先知道取号器那里当前总共有多少个号码, 然后每一个相应类型的窗口优先叫自己对应类型的客户, 当没有获取到本类型客户服务时,VIP客户和快速窗口客户也可以去叫普通号码, 这里需要将取号器产生的所有号码存起来, 可以用一个集合, 这样当取号器那里生成了一个号码时, 叫号器就记录这个号码, 然后开始一次叫号:

     2. 实现代码:

          <1>. NumberManager类-----定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合,定义一个产生新号码的方法和获取马上要为之服务的号码的方法,这两个方法被不同的线程操作了相同的数据,所以,要进行同步

          public class NumberManager {
          private int lastNumber = 0;
          private List queueNumbers = new ArrayList();
 
          public synchronized Integer generateNewNumber(){
                 queueNumbers.add(++lastNumber);
                 return lastNumber;
          }
 
         public synchronized Integer fetchNumber(){
                if(queueNumbers.size()>0){
                return (Integer)queueNumbers.remove(0);
               }else{
              return null;
        }
      }
   }

       <2>.NumberMachine类-----定义三个成员变量分别指向三个NumberManager对象,分别表示普通.快速和VIP客户的号码管理器,定义三个对应的方法来返回这个NumberManager对象,将NumberMachine类设计成单例

          private NumberMachine(){}
          private static NumberMachine instance = new NumberMachine();
          public static NumberMachine getInstance(){
                  return instance;
          }
 
          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;
         }

      <3>.ServiceWindow类-----定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法,定义三个方法分别对三种客户进行服务,为了观察运行效果,应详细打印出其中的细节信息

       public void start(){
                 Executors.newSingleThreadExecutor().execute(
                         new Runnable(){
                                 public void run(){
                                         //下面这种写法的运行效率低,最好是把while放在case下面
                                         while(true){
                                                switch(type){
                                                        case COMMON:
                                                                 commonService();
                                                                 break;
                                                        case EXPRESS:
                                                                 expressService();
                                                                 break;
                                                        case VIP:
                                                                 vipService();
                                                                 break;
                                               }
                                          }
                                 }
                        }
               );
         }

 

在看完张老师所讲的银行业务调动系统的视频后, 干觉自己在对面向对象方面的逻辑提高了很多, 使自己丰富了很多扩展性的知识,张老师在视频中传授给我们一些很重要的经验

“ 面向对象设计把握一个重要的经验: 谁拥有数据, 谁就对外提供操作这些数据的方法 ”和在解决问题上非常实用的经验 “ 画图非常有助于理解和分析问题, 你还有比画图更好的办法吗? ”看过张老师的视频后非常充实, 谢谢张前辈!

---------------------- android培训java培训、期待与您交流! ----------------------

相关文章推荐

黑马程序员学习笔记十——银行业务管理系统

---------------------- android培训、java培训、期待与您交流! ---------------------- 银行业务调度系统 分析设计 顾客不定时不结对的去银...

黑马程序员----银行业务调度系统学习笔记

---------------------- 黑马程序员 Android培训、期待与您交流! ---------------------- ---------------------- ...

黑马程序员_java学习笔记15—银行业务调度系统

------- android培训、java培训、期待与您交流! ---------- 银行业务调度系统 一、银行业务调度系统分析需求 1、 银行内有6个业务窗口,1 - 4号窗口为...

黑马程序员技术博客之银行业务调度系统学习笔记

以下是我学习张老师银行业务调度系统面试题的笔记 模拟银行业务调度系统的具体需求: 1.银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 2.有三种对应类型的客...

黑马程序员-学习笔记/银行业务系统

------- android培训、java培训、期待与您交流! ---------   黑马程序员培训-android培训,java面试题之 ---- 银行系统业务   根据我们在银行办理业...

【黑马程序员】银行业务调度系统_学习笔记

------- android培训、java培训、期待与您交流! ---------- 银行业务调度系统,起初gan...

黑马程序员学习笔记之十(银行业务调度系统学习)

---------------------- android培训、java培训、期待与您交流! ----------------------   一、面向对象的分析 1、有三种对应类型的...
  • BBF15
  • BBF15
  • 2012年03月15日 19:37
  • 263

【黑马程序员】 学习笔记 - 直击7K面试题 - 张孝祥老师的银行业务调度管理系统

----------------------android培训、java培训、期待与您交流!---------------------- 这是一道实际开发应用的一道题,含金量很高,向大家分享下我在学...
  • arp1991
  • arp1991
  • 2013年11月18日 23:28
  • 726

黑马程序员——银行业务调度系统学习笔记

------- android培训、java培训、期待与您交流! ----------   项目需求 该项目要求我们模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗...

黑马程序员----银行业务调度系统笔记

---------------------- android培训、java培训、期待与您交流! ---------------------- 银行业务调度系统: 需求分析: 1:银行内有六个业务...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员---银行业务调动系统 学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)