Behavioral Design Pattern - Chain of Responsibility Pattern
This commit is contained in:
32
com/javadevjournal/design/behavioral/cor/ATMDispenser.java
Normal file
32
com/javadevjournal/design/behavioral/cor/ATMDispenser.java
Normal 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));
|
||||
}
|
||||
}
|
||||
15
com/javadevjournal/design/behavioral/cor/Currency.java
Normal file
15
com/javadevjournal/design/behavioral/cor/Currency.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user