public class CallHandler{
private static CallHandler instance;
/*
三個員工層級:接線員,主管,經理
*/
private final int LEVELS=3;
/*
起始設定10位接線員,4位主管和2位經理
*/
private final int NUM_RESPONDENTS=10;
private final int NUM_MANAGERS=4;
private final int NUM_DIRECTORS=2;
/*
員工列表,以層級區分
employeeLevels[0]=接線員;
employeeLevels[1]=主管;
employeeLevels[2]=經理;
*/
List<List<Employee>> employeeLevels;
/*存放來電層級的隊列*/
List<List<Call>> callQueues;
protected CallHandler(){...}
/*取得單態類的實例*/
public static CallHandler getInstance()
{
if(instance == null) instance=new CallHandler();
return instance;
}
/*找出第一個有空處理來電的員工*/
public Employee getHandlerForCall(Call call){...}
/*未來電分派給有空的員工,若沒人有空,就存放在隊列中*/
public void dispatchCall(Caller caller)
{
Call call=new Call(caller);
dispatchCall(call);
}
/*未來電分配給有空的員工,若沒人有空,就存放在隊列中
*/
public void dispatchCall(Call call)
{
//試着未來電分派給層級最低的員工
Employee emp=getHandlerForCall(call);
if(emp!=null)
{
emp.receiveCall(call);
call.setHandler(emp);
}
else
{
/*根據來電級別,未來電放到相應的隊列中*/
call.reply("Please wait for free employee to reply");
callQueues[call.getRank().getValue()].add(call);
}
}
//有員工有空了,查找該員工可服務的來電,若分派了來電,則返回true,不然返回false
public boolean assignCall(Employee emp){....}
}spa
Call 表明客戶來電,每次來電有個最低層級,而且會被分派給第一個可處理該來電的員工。隊列