银行业务调动系统小结1

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

package com.isoftstone.interview.bank;


import java.util.ArrayList;
import java.util.List;

/*分析和设计:
(一)有三种对应类型的客户:VIP客户,普通客户,快速客户,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务。

  1.首先,经常在银行办理业务的人更有利于理解本系统,

  2.由于有三类客户,每类客户的号码编排都是完全独立的,所以,我想到本系统一共要产生三个号码管理器对象,

  各自管理一类用户的排队号码。这三个号码管理器对象统一由一个号码机器进行管理,这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。
(二)各类型客户在其对应窗口按顺序依次办理业务 ,准确地说,应该是窗口依次叫号。

  1.各个窗口怎么知道该叫哪一个号了呢?它一定是问的相应的号码管理器,即服务窗口每次找号码管理器获取当前要被服务的号码。

  2.需要多次亲身经历银行的这种业务,再加之积累了大量面向对象的应用开发经验,轻松进行这种设计,

发掘出其中隐含的对象信息就是日积月累出来的一种感觉。*/

/**
 *
 * @author Administrator
 *
 */
//(一)NumberManager类:号码出现,获取类

public class NumberManager {
 
 private int lastNumber = 1 ;//  定义一个客户号码
    private List<Integer> queueNumbers  = new ArrayList<Integer>();//存储所有等待服务的客户号码的队列集合。
 public synchronized Integer generateNewManager()
 { 
  queueNumbers.add(lastNumber);//把上一个客户的号码存入
  return ++lastNumber;//把新的号码给新来的客户
 }
 /*
   线程1:是客户进来排号
  线程2:是服务窗口来拿号
 都是对queueNumbers这个相同的数据进行操作
 因此,要进行同步
    */
 public synchronized Integer fetchNumber()//服务窗口来取号
 {
  if(queueNumbers.size()>0)//判断是否有客户
  {
      return queueNumbers.remove(0);//把最先的客户号码返回
  }
  else
  {
   return null;//返回null
  }
 }
}

 

package com.isoftstone.interview.bank;
/*(二)NumberMachine类
源码如下:
*/
public class NumberMachine { //号码管理类:3类
 
 private NumberManager commonMansger = new NumberManager();//普通客户
 private NumberManager expressMansger = new NumberManager();//快速
 private NumberManager VipMansger = new NumberManager();   //vip客户

 
 /*
  * 因为这个号码管理类的客户是固定的,客户不能随便进来,必须由唯一一个类的对象进行处理
  * 所以,应把NumberMachine类设计成单例。
  */
 private NumberMachine(){}
 private static NumberMachine instance = new NumberMachine();
 public static NumberMachine getInstance()
 {
  return instance;
 }
 //返回普通号
 public NumberManager getCommonMansger()
 {
  return commonMansger;
 }
 //返回快速号
 public NumberManager getExpressMansger()
 {
  return expressMansger;
 }
 //返回Vip号
 public NumberManager getVipMansger()
 {
  return VipMansger;
 }
}


package com.isoftstone.interview.bank;
/*(三)CustomerType枚举类
1.系统中有三种类型的客户,所以用定义一个枚举类,其中定义三个成员分别表示三种类型的客户。
2.重写toString方法,返回类型的中文名称。这是在后面编码时重构出来的。
源码如下:
*/
public enum CustomerType {
 
 COMMON,EXPRESS,VIP;
 
 //重写toString()方法
  public String toString()
  {
   String name = null;
   switch(this)
   {
       case COMMON :
      name = "COMMON";
       case EXPRESS:
       name = "EXPRESS";
       case VIP:
       name = "VIP";
      
   }
   return name;
  }
}

 

package com.isoftstone.interview.bank;

import java.util.Random;
import java.util.concurrent.Executors;

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值