CustomerServiceProvider.java
public abstract class CustomerServiceProvider {
protected CustomerServiceProvider nextProvider;
public CustomerServiceProvider() {
// TODO Auto-generated constructor stub
}
public abstract void attendCustomer();
public abstract void setNextProvider();
}
AutomatedCustomerServiceProvider.java
import java.util.Scanner;
public class AutomatedCustomerServiceProvider extends CustomerServiceProvider {
public AutomatedCustomerServiceProvider() {
// TODO Auto-generated constructor stub
}
public void attendCustomer(){
System.out.println("--------------------------------------------------------------------------------------");
System.out.println("Hello I am automated robot to serve you, thank you for calling");
System.out.println("if you are satisfied, press 0 to exit else press 1 to talk with support staff");
Scanner sc = new Scanner(System.in);
if(sc.nextInt()==0){
System.out.println("Thank you for calling, have a nice day");
return;
} else {
System.out.println("connecting with support staff, pls stay online");
this.nextProvider.attendCustomer();
}
}
public void setNextProvider(){
nextProvider = new SupportingCustomerServiceProvider();//set support staff as next provider
nextProvider.setNextProvider();//set expert as next provider
}
}
SupportingCustomerServiceProvider.java
import java.util.Scanner;
public class SupportingCustomerServiceProvider extends CustomerServiceProvider {
public SupportingCustomerServiceProvider() {
// TODO Auto-generated constructor stub
}
@Override
public void attendCustomer() {
System.out.println("--------------------------------------------------------------------------------------");
System.out.println("Hello I am support staff to serve you, thank you for calling");
System.out.println("if you are satisfied, press 0 to exit else press 1 to talk with expert staff");
Scanner sc = new Scanner(System.in);
if(sc.nextInt()==0){
System.out.println("Thank you for calling, have a nice day");
return;
} else {
System.out.println("connecting with expert staff, pls stay online");
this.nextProvider.attendCustomer();
}
}
@Override
public void setNextProvider() {
// TODO Auto-generated method stub
nextProvider = new ExpertCustomerServiceProvider();//set support staff as next provider
}
}
ExpertCustomerServiceProvider.java
import java.util.Scanner;
public class ExpertCustomerServiceProvider extends CustomerServiceProvider {
public ExpertCustomerServiceProvider() {
// TODO Auto-generated constructor stub
}
@Override
public void attendCustomer() {
System.out.println("--------------------------------------------------------------------------------------");
System.out.println("Hello I am expert staff to serve you, thank you for calling");
System.out.println("Happy to serve you, have a nice day, bye bye");
}
@Override
public void setNextProvider() {
// TODO Auto-generated method stub
}
}
ChainOfResponsibilityPatternDemo.java
public class ChainOfResponsibilityPatternDemo {
public ChainOfResponsibilityPatternDemo() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
//Create Chain of Customer Service providers robot -> support staff-> expert staff
CustomerServiceProvider robot = new AutomatedCustomerServiceProvider();
robot.setNextProvider();//setting next providers as
//call for service
robot.attendCustomer();
}
}
Output
