-------
android培训
、
java培训
、期待与您交流! ----------
设计
银行业务种的流程:
用户进入银行--->取号---->等待----->窗口叫号,去对应的窗口处理业务
关联的对象有用户,窗口,取号器
但实际中这种模拟不需要用户有任何行为所以可以用数组替代
取号器则需要3个号码产生器对应3种类型业务的客户,普通,VIP,快速客户
所以实际需要3种类型 取号器,号码产生器,窗口
NumberMachine,NumberManager,servicesWindow
系统
NumberManager号码产生器负责产生新号码
generateNewNumber()
,和叫号
fetchNumber()
两种方法都会在线程里执行,所以需要加锁
银行只有一个取号器----->将NumberMachine设计成单例
NumberMachine包含3个NumberManager分别对应普通、快速、VIP客户
银行有6个窗口--->4个普通 一个VIP 一个快速窗口
定义一个枚举来指定是什么类型窗口
Enum CustomerType--->COMMON,EXPRESS,VIP
窗口类型使用set方法来制定,而不是构造方法,这样在之后可以改变窗口类型,而不是静态绑定
定义3个方法
commonService();
普通窗口,对普通用户叫号,处理业务,随即等待1到10秒,如果未叫到号,则休息一秒。
expressService();
快速窗口,对快速用户叫号,处理业务,处理1秒,如果未叫到号,则对普通用户叫号,如未叫到,则休息一秒。
vipService();
VIP窗口,对VIP用户叫号,处理业务,随即等待1到10秒,如未叫到VIP用户,则对普通用户叫号,如未叫到,则休息一秒
建立一个线程---->每个窗口对象都有单独的线程,不停的根据窗口类型类型(枚举CustomerType+switch())叫号。
接下来只需要一个Main来给按随即时间增加用户
启动6个窗口----> 4个普通,一个快速,一个Vip
建立3个线程调度
Executors.newScheduledThreadPool(1).scheduleAtFixedRate()
分别按比例1:6:3成生VIP,普通,快速类型用户,等待窗口处理
系统基本完成