Categories
Algorithms & Design Design Pattern

Chain Of Responsibility Pattern

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

Leave a comment

Design a site like this with WordPress.com
Get started