1.有三种客户类型:快速,VIP,和普通。每种类型的客户都是一个集合,建了一个NumberManager类,在NumberMachine类单一设计模式的处理下,NumberManager产生的对象用于管理某一个类型下所有用户的统一编号。创因为窗口要从这个类取数据,所以这个类提供了一个remove的方法,又因为集合的remove方法可能返回空值,所以这个方法的返回值从int改成了Integer.这个类还要能增加数据,所以提供了一个generateNewNumber的方法。
在后期打印中需要对客户类型进行中文打印,专门新建了本类,并覆写toString方法,使得后期代码可读性和可修改性都得到了提高。另由于一共只有三种可用客户类型,所以此处使用了枚举类。
用lastNumber记录号码管理器当前管理的客户类型总共的客户数量,queueNumbers用于记录新客户序号,使用ArrayList集合是为了更方便管理队列型(即数据遵循“先进先出”原则)的数据
为三种客户建立各自的独立号码管理器,由,也就保证的数据管理的统一性使用的是单例设计模
2.服务窗口的功能是取到号码,处理一段时间,然后处理下一个。是个循环,所以用while实现。取到号码是调用fetchNumber这个方法。取到后为了模拟现实中的处理过程,用sleep一段时间来代替。具体的时间由Random算出。如果fetchNumber方法返回个空,那么就先sleep一秒,要不就继续循环。而快窗口和VIP窗口的fetchNumber方法返回空后,会调用普通窗口的处理方法。所以这里可以用子类来实现,但为了实现能让普通窗口也变成其他俩种窗口,所以没有用继承。这样如果要修改窗口的类型,直接setCustomerType就能改变窗口的作用。
设置服务窗口默认属性为普通,为了打印时观察,设置窗口号码为number
每次都是在建立完窗口之后才会调用start方法,此时不同窗口已经具有了自己的type属性,start方法首先是建立了一个线程,然后在线程里调用了对应各自格式的窗口服务代码
根据ServiceWindow类的默认值,产生4个普通窗口,并按顺序编号,调用start方法后,根据type类型调用commonService()为普通用户服务
根据ServiceWindow类的默认值,产生4个普通窗口,并按顺序编号,调用start方法后,根据type类型调用commonService()为普通用户服务