需求分析:
1. 有三种类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
2. 银行有6个业务窗口:1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
3. 各种用户异步随机产生,产生的比率为:VIP客户:普通客户:快速客户= 1:6:3。
面相对象的分析和设计:
1.有三种对应类型的客户:VIP客户,普通客户,快速客户 ,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务 。这就需要一个号码管理器对象,让这个对象不断地产生号码,变相的等同于随即产生了客户。由于有三类客户,每类客户的号码编排都是完全独立的,所以,本系统一共要产生三个号码管理器对象,各自管理一类用户的排队号码。这三个号码管理器对象统一由一个号码机器进行管理,这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。
2. 各类型客户在其对应窗口按顺序依次办理业务 ,准确地说,应该是窗口依次叫号。但是各个窗口如何知道下一个该叫哪个号呢?这个用面向对象的思想分析:谁持有数据谁提供方法,必然是找相应的号码管理器,即服务窗口每次找号码管理器获取当前要被服务的号码
代码需实现的功能:
号码管理器:
方法:添加号码和取号码
注意:从名字上就可以看出这两个线程是互斥的 也就是说取号和添号这两个是不能同时进行的 故需要加锁
号码机:
这个需要注意的就是,要写成单例。
服务窗口:
不同的客户有不同的窗口服务,所以需要知道客户的类型,还要根据客户的不同类型进行分类服务。
顾客:
由于顾客只有三种确定类型所以很显然 单例比较好。
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net