package com.itcast.Bank; import java.util.ArrayList; import java.util.List; public class NumberMachine { private NumberMachine(){} private static NumberMachine instace=new NumberMachine(); public static NumberMachine getInstance() { return instace; } private NumberManager commonManager = new NumberManager(); private NumberManager expressManager = new NumberManager(); private NumberManager vipManager = new NumberManager(); public NumberManager getCommonManager() { return commonManager; } public NumberManager getExpressManager() { return expressManager; } public NumberManager getVipManager() { return vipManager; } }
4.CustomerType枚举类
(1)系统中有三种类型的客户,所以用定义的一个枚举类,其中定义三个成员分别表示三种类型的客户
(2)重写toString方法,返回类型的中文名称。
package com.itcast.Bank;
public enum CustomerType {
COMMON,EXPRESS,VIP; public String toString() { String name =null; switch(this) { case COMMON: return "普通"; case EXPRESS: return "快速"; case VIP: // System.out.println(name()); return name();
} return null; } }
5.ServiceWindow类
(1)定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法
(2)定义三个方法分别对三种客户进行服务,为了观察运行的效果,应详细打印出其中的细节信息
代码如下:
package com.itcast.Bank; import java.util.Random; import java.util.concurrent.Executors; public class ServiceWindow { private CustomerType type = CustomerType.COMMON; private int windowId = 1; public void setType(CustomerType type) { this.type = type; } public void setWindowId(int windowId) { this.windowId = windowId; } public void start() { Executors.newSingleThreadExecutor().execute(new Runnable() { public void run() { while (true) { switch (type) { case COMMON: commonService(); break; case EXPRESS: expressService(); break; case VIP: vipService(); break; } } } }); }
private void commonService() { String windowName = "第" + windowId + "号" + type + "窗口"; Integer num = NumberMachine.getInstance().getCommonManager().fetServiceNumber(); System.out.println(windowName+"正在普通获取任务"); if (num != null) {
System.out.println(windowName + "开始为第" + num + "个" + "普通客户服务"); long beginTime = System.currentTimeMillis();