Skip to content

Commit 8f28ba0

Browse files
committed
Chain of Responsibility design pattern - Money Dispenser Project
1 parent 6deb6b9 commit 8f28ba0

2 files changed

Lines changed: 122 additions & 0 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.premaseem.ATMmoneyDispenser;
2+
3+
/*
4+
@author: Aseem Jain
5+
@title: Design Patterns with Java 9
6+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
7+
*/
8+
9+
import java.util.Scanner;
10+
11+
public class Client {
12+
13+
public static void main(String[] args) {
14+
15+
System.out.println("Welcome to ATM Money dispenser program designed using Chain of Responsibility");
16+
Scanner scan = new Scanner(System.in);
17+
18+
MoneyChainHandler thousandollarHandler_1000 = new ThousandollarHandler_1000(1000);
19+
MoneyChainHandler FiveHundredollarHandler_500 = new FiveHundredollarHandler_500(500);
20+
MoneyChainHandler HundrendollarHandler_100 = new HundrenDollarHandler_100(100);
21+
MoneyChainHandler FiftydollarHandler_50 = new FiftyDollarHandler_50(50);
22+
MoneyChainHandler TendollarHandler_10 = new TenDollarHandler_10(10);
23+
MoneyChainHandler FivedollarHandler_5 = new FiveDollarHandler_5(5);
24+
MoneyChainHandler TwodollarHandler_2 = new TwoDollarHandler_2(2);
25+
MoneyChainHandler OnedollarHandler_1 = new OneDollarHandler_1(1);
26+
27+
// Setting up the change
28+
thousandollarHandler_1000.setNextHandler(FiveHundredollarHandler_500);
29+
FiveHundredollarHandler_500.setNextHandler(HundrendollarHandler_100);
30+
HundrendollarHandler_100.setNextHandler(FiftydollarHandler_50);
31+
FiftydollarHandler_50.setNextHandler(TendollarHandler_10);
32+
TendollarHandler_10.setNextHandler(FivedollarHandler_5);
33+
FivedollarHandler_5.setNextHandler(TwodollarHandler_2);
34+
TwodollarHandler_2.setNextHandler(OnedollarHandler_1);
35+
36+
String repeatRunFlag = "y";
37+
while (!repeatRunFlag.equalsIgnoreCase("no")) {
38+
System.out.println("Please enter amount you want to withdraw eg 3450 ");
39+
int choice = scan.nextInt();
40+
thousandollarHandler_1000.handler(choice);
41+
42+
System.out.println("=============================");
43+
44+
System.out.println("Press No to Exit and any other character to repeat .... ");
45+
try {
46+
repeatRunFlag = scan.next();
47+
} catch (Exception e) {
48+
repeatRunFlag = "n";
49+
}
50+
}
51+
52+
System.out.println("\n $$$$$$$$$$$$$$$$$$$$ Thanks by Prem Aseem $$$$$$$$$$$$$$$$$$$$$$ \n ");
53+
System.out.println("\n $$$$$$$$$$$$$$$$$$$$$ www.premaseem.me $$$$$$$$$$$$$$$$$$$$$$ \n ");
54+
55+
}
56+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.premaseem.ATMmoneyDispenser;
2+
3+
/*
4+
@author: Aseem Jain
5+
@title: Design Patterns with Java 9
6+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
7+
*/
8+
9+
public abstract class MoneyChainHandler {
10+
MoneyChainHandler nextHandler = null;
11+
Integer noteDenomination = 0;
12+
13+
public MoneyChainHandler setNextHandler (MoneyChainHandler nextHandler) {
14+
this.nextHandler = nextHandler;
15+
return this.nextHandler;
16+
}
17+
18+
public void handler (int dollarBill) {
19+
int notes = dollarBill / noteDenomination;
20+
int remainingAmount = dollarBill % noteDenomination;
21+
22+
if (notes > 0) {
23+
System.out.printf("dispatched %d X %d = %d handled by %s \n", noteDenomination, notes, (noteDenomination * notes), this.getClass().getSimpleName());
24+
}
25+
if (nextHandler != null && remainingAmount > 0) {
26+
nextHandler.handler(remainingAmount);
27+
}
28+
}
29+
30+
}
31+
32+
class HundrenDollarHandler_100 extends MoneyChainHandler {
33+
public HundrenDollarHandler_100 (Integer noteDenomination) {
34+
this.noteDenomination = noteDenomination;
35+
}
36+
}
37+
38+
class FiftyDollarHandler_50 extends MoneyChainHandler {
39+
public FiftyDollarHandler_50 (Integer noteDenomination) {
40+
this.noteDenomination = noteDenomination;
41+
}
42+
}
43+
44+
class TenDollarHandler_10 extends MoneyChainHandler {
45+
public TenDollarHandler_10 (Integer noteDenomination) {
46+
this.noteDenomination = noteDenomination;
47+
}
48+
}
49+
50+
class FiveDollarHandler_5 extends MoneyChainHandler {
51+
public FiveDollarHandler_5 (Integer noteDenomination) {
52+
this.noteDenomination = noteDenomination;
53+
}
54+
}
55+
56+
class TwoDollarHandler_2 extends MoneyChainHandler {
57+
public TwoDollarHandler_2 (Integer noteDenomination) {
58+
this.noteDenomination = noteDenomination;
59+
}
60+
}
61+
62+
class OneDollarHandler_1 extends MoneyChainHandler {
63+
public OneDollarHandler_1 (Integer noteDenomination) {
64+
this.noteDenomination = noteDenomination;
65+
}
66+
}

0 commit comments

Comments
 (0)