1.程序设计图:
2.类的设计:
NumberManager(号码管理器):用于产生不同类型客户的服务号码
成员变量:
号码计数器——用于记录上一个用户的服务号码;
有序集合——用于存储等待服务的客户的号码;
成员方法:
产生号码——根据上一个客户的服务号码,产生下一个客户的服务号码,并把它添加到有续集合并且返回该号码(即用户获取号码);
获取号码——获取并移除有序集合里第一个等待的客户(即服务窗口为一个客户服务)
上面的方法由于操作了同一资源,需要同步;
NumberMachine(号码机器):号码机器用于管理号码管理器,整个程序运行期间只有一个实例,则需要设计成单例;
成员变量:三个号码管理器对象,分别对应“普通客户”、“快速客户”、“VIP客户”;
成员方法:三个获取号码管理器的方法;
CustomerType(客户类型,枚举):包含三个成员分别对应三类不同的客户,覆写toString方法用来返回三个成员对应的中文名称;
ServiceWindow(服务窗口):针对不同客户的服务窗口;
成员变量:
窗口号——指示当前窗口是哪个窗口;
窗口类型——记录当前窗口是为哪类用户服务;
成员方法:
Start()——开启一个线程,根据客户类型调用不同的服务方法;
commonService()——为普通客户服务;
expressService()——为快速客户服务,没有快速客户为普通客户服务;
vipService()——为VIP客户服务,没有快速客户为普通客户服务;
Constants:用来封装程序中用到的常量;
MainClass:main方法所在的类;
创建六个服务窗口,4个为普通窗口,一个为快速窗口;
开启三个定时器,分别定时创建不同的客户;
3.心得:
面向对象是对现实生活的一种抽象总结的思想,所以使用面向对象思想解决问题就要联系实际,这样才能使问题变得简单。