package kr.co.ezenac.review02;
import java.io.IOException;
/*
* 고객센터에 전화 상담을 하는 일반인들이 있습니다.
* 일단 고객에게서 전화가 오면 대기열에 저장되고 각 상담원에게 배분이 됩니다.
* 배분이 되는 정책은 크게 3가지가 있습니다.
* 1. 모든 상담원이 동일한 상담 건수를 처리하도록 상담원 순서대로 배분합니다.
* 2. 쉬고 있거나 상담원에게 할당된 통화 수가 가장 적은 상담원에게 배분합니다.
* 3. 고객 등급에 따라 등급이 높은 고객은 업무능력이 우수한 상담원에게 배분합니다.
*
* <출력예시>
* 전화 상담원 할당 방식을 선택하세요.
* R : 한 명씩 차례대로
* L : 대기가 적은 상담원 우선
* P : 우선순위가 높은 고객 우선 숙련도 높은 상담원
*
* r
* 상담 전화를 순서대로 대기열에서 가져옵니다.
* 다음 순서의 상담원에게 배분합니다.
*
* l
* 상담 전화를 순서대로 대기열에서 가져옵니다.
* 현재 상담 업무가 없거나 상담 대기가 가장 적은 상담원에게 할당합니다.
*
* p
* 고객 등급이 높은 고객의 Call을 먼저 가져옵니다.
* 업무 숙련도가 높은 상담원에게 먼저 배분합니다.
*
* u
* 지원되지 않는 기능입니다.
*/
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 : 우선순위가 높은 고객 우선 숙련도 높은 상담원");
System.out.print("선택 > ");
int channel = System.in.read();
Schduler schduler = null;
if(channel == 'R' || channel == 'r') {
schduler = new RoundRobin();
} else if(channel == 'L' || channel == 'l') {
schduler = new LeastJob();
} else if(channel == 'P' || channel == 'p') {
schduler = new PriorityAllocation();
} else {
System.out.println("지원되지 않는 기능입니다.");
return;
}
schduler.getNextCall();
schduler.sendCallToAgent();
}
}
public class LeastJob implements Schduler {
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("현재 상담 업무가 없거나 상담 대기가 가장 적은 상담원에게 할당합니다.");
}
}
public class RoundRobin implements Schduler {
@Override
public void getNextCall() {
System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("다음 순서의 상담원에게 배분합니다.");
}
}
public class PriorityAllocation implements Schduler {
@Override
public void getNextCall() {
System.out.println("고객 등급이 높은 고객의 Call을 먼저 가져옵니다.");
}
@Override
public void sendCallToAgent() {
System.out.println("업무 숙련도가 높은 상담원에게 먼저 배분합니다.");
}
}
public interface Schduler {
public void getNextCall();
public void sendCallToAgent();
}