Click here to watch in Youtube : https://www.youtube.com/watch?v=tyGnCb-kE1I
 Click the below Image to Enlarge
| Chain of Responsibility Design pattern - Implementation | 
| Chain of Responsibility Design pattern - Implementation - Class Diagram | 
RsHandler.java
public abstract class RsHandler
{
RsHandler rsHandler;
public void nextHandler( RsHandler rsHandler )
{
this.rsHandler = rsHandler;
}
public abstract void dispatchRs( long requestedAmount );
}
HundredRsHandler.java
public class HundredRsHandler extends RsHandler
{
public void dispatchRs(long requestedAmount)
{
long numberofNotesToBeDispatched = requestedAmount / 100;
if (numberofNotesToBeDispatched > 0)
{
if(numberofNotesToBeDispatched>1)
{
System.out.println(numberofNotesToBeDispatched + " ,Hundred Rs notes are dispatched by HundredRsHandler\n");
}
else
{
System.out.println(numberofNotesToBeDispatched + " ,Hundred Rs note is dispatched by HundredRsHandler\n");
}
}
long pendingAmountToBeProcessed = requestedAmount % 100;
if (pendingAmountToBeProcessed > 0)
{
rsHandler.dispatchRs(pendingAmountToBeProcessed);
}
}
}
FiftyRsHandler.java
public class FiftyRsHandler extends RsHandler
{
 public void dispatchRs(long requestedAmount)
 {
 long numberofNotesToBeDispatched = requestedAmount / 50;
 if (numberofNotesToBeDispatched > 0)
 {
 if (numberofNotesToBeDispatched > 1)
 {
 System.out.println(numberofNotesToBeDispatched + " ,Fifty Rs notes are dispatched by FiftyRsHandler\n");
 }
 else
 {
 System.out.println(numberofNotesToBeDispatched + " ,Fifty Rs note is dispatched by FiftyRsHandler\n");
 }
 }
 long pendingAmountToBeProcessed = requestedAmount % 50;
 if (pendingAmountToBeProcessed > 0)
 {
 rsHandler.dispatchRs(pendingAmountToBeProcessed);
 }
 }
}
TwentyRsHandler.java
public class TwentyRsHandler extends RsHandler
{
 public void dispatchRs(long requestedAmount)
 {
 long numberofNotesToBeDispatched = requestedAmount / 20;
 if (numberofNotesToBeDispatched > 0)
 {
 if (numberofNotesToBeDispatched > 1)
 {
 System.out.println(numberofNotesToBeDispatched + " ,Twenty Rs notes are dispatched by TwentyRsHandler\n");
 }
 else
 {
 System.out.println(numberofNotesToBeDispatched + " ,Twenty Rs note is dispatched by TwentyRsHandler\n");
 }
 }
 long pendingAmountToBeProcessed = requestedAmount % 20;
 if (pendingAmountToBeProcessed > 0)
 {
 rsHandler.dispatchRs(pendingAmountToBeProcessed);
 }
 }
}
FiveRsHandler.java
public class FiveRsHandler extends RsHandler
{
 public void dispatchRs(long requestedAmount)
 {
 long numberofNotesToBeDispatched = requestedAmount / 5;
 if (numberofNotesToBeDispatched > 0)
 {
 if (numberofNotesToBeDispatched > 1)
 {
 System.out.println(numberofNotesToBeDispatched + " ,Five Rs notes are dispatched by FiveRsHandler\n");
 }
 else
 {
 System.out.println(numberofNotesToBeDispatched + " ,Five Rs note is dispatched by FiveRsHandler\n");
 }
 }
 long pendingAmountToBeProcessed = requestedAmount % 5;
 if (pendingAmountToBeProcessed > 0)
 {
 rsHandler.dispatchRs(pendingAmountToBeProcessed);
 }
 }
}
ATM.java
public class ATM
{
 private static HundredRsHandler hundredRsHandler = new HundredRsHandler();
 private static FiftyRsHandler   fiftyRsHandler   = new FiftyRsHandler();
 private static TwentyRsHandler  twentyRsHandler  = new TwentyRsHandler();
 private static FiveRsHandler    fiveRsHandler    = new FiveRsHandler();
 static
 {
 // Prepare the chain of Handlers
 hundredRsHandler.nextHandler(fiftyRsHandler);
 fiftyRsHandler.nextHandler(twentyRsHandler);
 twentyRsHandler.nextHandler(fiveRsHandler);
 }
 public void withdraw( long requestedAmount )
 {
 hundredRsHandler.dispatchRs(requestedAmount);
 }
}
ChainOfResDemo.java
public class ChainOfResDemo
{
 public static void main( String[] args )
 {
 ATM atm = new ATM();
 System.out.println("\n ----------------Requested Amount 475-----------------------\n");
 atm.withdraw(475);
 System.out.println("\n ----------------Requested Amount 455-----------------------\n");
 atm.withdraw(455);
 System.out.println("\n ----------------Requested Amount 520-----------------------\n");
 atm.withdraw(520); 
 }
}
Output
 ----------------Requested Amount 475-----------------------
4 ,Hundred Rs notes are dispatched by HundredRsHandler
1 ,Fifty Rs note is dispatched by FiftyRsHandler
1 ,Twenty Rs note is dispatched by TwentyRsHandler
1 ,Five Rs note is dispatched by FiveRsHandler
 ----------------Requested Amount 455-----------------------
4 ,Hundred Rs notes are dispatched by HundredRsHandler
1 ,Fifty Rs note is dispatched by FiftyRsHandler
1 ,Five Rs note is dispatched by FiveRsHandler
 ----------------Requested Amount 520-----------------------
5 ,Hundred Rs notes are dispatched by HundredRsHandler
1 ,Twenty Rs note is dispatched by TwentyRsHandler
See also:
 


 
No comments:
Post a Comment