Behavioral Design Pattern - Chain of Responsibility Pattern

This commit is contained in:
KunwarVikas
2023-01-01 14:49:16 +05:30
parent d281e8c609
commit a7ae8d782b
6 changed files with 131 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
package main.com.kunwar.designpatterns.behavioral.cor;
import java.util.Scanner;
/**
* @author Kunwar Vikas
*/
public class ATMDispenser {
private DispenseChain dispenseChain1;
public ATMDispenser() {
// initialize the chain
this.dispenseChain1 = new Dollar50Dispenser();
DispenseChain dispenseChain2 = new Dollar20Dispenser();
DispenseChain dispenseChain3 = new Dollar10Dispenser();
// set the chain of responsibility
dispenseChain1.setNextChain(dispenseChain2);
dispenseChain2.setNextChain(dispenseChain3);
}
public static void main(String[] args) {
ATMDispenser atmDispenser = new ATMDispenser();
int amount = 0;
System.out.print("Enter amount to dispense: ");
Scanner input = new Scanner(System.in);
amount = input.nextInt();
if (amount % 10 != 0) {
System.out.println("Amount should be in multiple of 10s.");
return;
}
// process the request
atmDispenser.dispenseChain1.dispense(new Currency(amount));
}
}

View File

@@ -0,0 +1,15 @@
package main.com.kunwar.designpatterns.behavioral.cor;
/**
* @author Kunwar Vikas
*/
public class Currency {
private int amount;
public Currency(int amount){
this.amount=amount;
}
public int getAmount(){
return this.amount;
}
}

View File

@@ -0,0 +1,9 @@
package main.com.kunwar.designpatterns.behavioral.cor;
/**
* @author Kunwar Vikas
*/
public interface DispenseChain {
void setNextChain(DispenseChain nextChain);
void dispense(Currency currency);
}

View File

@@ -0,0 +1,26 @@
package main.com.kunwar.designpatterns.behavioral.cor;
/**
* @author Kunwar Vikas
*/
public class Dollar10Dispenser implements DispenseChain {
private DispenseChain dispenseChain;
@Override
public void setNextChain(DispenseChain nextChain) {
this.dispenseChain =nextChain;
}
@Override
public void dispense(Currency currency) {
if(currency.getAmount() >= 10){
int num = currency.getAmount()/10;
int remainder = currency.getAmount() % 10;
System.out.println("Dispensing "+num+" 10$ note");
if(remainder !=0) this.dispenseChain.dispense(new Currency(remainder));
}else{
this.dispenseChain.dispense(currency);
}
}
}

View File

@@ -0,0 +1,25 @@
package main.com.kunwar.designpatterns.behavioral.cor;
/**
* @author Kunwar Vikas
*/
public class Dollar20Dispenser implements DispenseChain {
private DispenseChain dispenseChain;
@Override
public void setNextChain(DispenseChain nextChain) {
this.dispenseChain = nextChain;
}
@Override
public void dispense(Currency currency) {
if (currency.getAmount() >= 20) {
int num = currency.getAmount() / 20;
int remainder = currency.getAmount() % 20;
System.out.println("Dispensing " + num + " 20$ note");
if (remainder != 0) this.dispenseChain.dispense(new Currency(remainder));
} else {
this.dispenseChain.dispense(currency);
}
}
}

View File

@@ -0,0 +1,24 @@
package main.com.kunwar.designpatterns.behavioral.cor;
/**
* @author Kunwar Vikas
*/
public class Dollar50Dispenser implements DispenseChain {
private DispenseChain dispenseChain;
@Override
public void setNextChain(DispenseChain nextChain) {
this.dispenseChain =nextChain;
}
@Override
public void dispense(Currency currency) {
if(currency.getAmount() >= 50){
int num = currency.getAmount()/50;
int remainder = currency.getAmount() % 50;
System.out.println("Dispensing "+num+" 50$ note");
if(remainder !=0) this.dispenseChain.dispense(new Currency(remainder));
}else{
this.dispenseChain.dispense(currency);
}
}
}