고객 센터에 전화 상담을 하는 상담원들이 있다. 고객에게 전화가 오면 대기열에 저장해놓고 각 상담원에게 배분된다.
배분 정책 1) 들어오는 상담 전화를 대기열에 순서대로 저장해 놓고 상담원에게 순서대로 배분한다. 2) 쉬고 있거나 할당된 통화 수가 가장 적은 상담원에게 배분한다. 3) 등급이 높은 고객의 전화를 업무능력이 우수한 상담원에게 배분한다.
클래스 다이어그램
Scheduler.java
package scheduler;
public interface Scheduler {
void getNextCall(); // 고객의 전화를 가져옴
void sendCallToAgent(); // 상담원에게 배분
}
LeastJob.java
package scheduler;
public class LeastJob implements Scheduler{
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("현재 상담업무가 없거나 상담대기가 적은 상담원에게 배분합니다.");
}
}
PriorityAllocation.java
package scheduler;
public class PriorityAllocation implements Scheduler{
@Override
public void getNextCall() {
System.out.println("등급이 높은 고객의 상담 전화를 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("업무 능력이 우수한 상담원에게 배분합니다.");
}
}
RoundRobin.java
package scheduler;
public class RoundRobin implements Scheduler{
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("다음 순서의 상담원에게 배분합니다.");
}
}
SchedulerTest.java
package scheduler;
import java.io.IOException;
public class SchedulerTest {
public static void main(String[] args) throws IOException {
System.out.println("전화 상담원 할당 방식을 선택하세요");
System.out.println("R : 한명씩 차례대로");
System.out.println("L : 대기가 적은 상담원 우선");
System.out.println("P : 우선순위가 높은 고객우선 숙련도 높은 상담원");
int ch = System.in.read();
Scheduler scheduler = null;
if ( ch == 'R' || ch =='r') {
scheduler = new RoundRobin();
}
else if ( ch == 'L' || ch =='l') {
scheduler = new LeastJob();
}
else if ( ch == 'P' || ch =='p') {
scheduler = new PriorityAllocation();
}
else {
System.out.println("지원되지 않는 기능입니다.");
return;
}
scheduler.getNextCall();
scheduler.sendCallToAgent();
}
}