Skip to content

Commit fb2d5e3

Browse files
committed
Chain of Responsibility design pattern - BONUS EXAMPLE - logger application
1 parent 50fa55c commit fb2d5e3

2 files changed

Lines changed: 113 additions & 0 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.premaseem.chainOfResponsibility.loggerProgram;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Scanner;
6+
7+
public class ClientFileForLoggerProgram {
8+
9+
public static void main(String[] args) {
10+
11+
System.out.println("Welcome to Logger program designed using Chain of Responsibility ");
12+
Scanner scan = new Scanner(System.in);
13+
LogHandler logHandler;
14+
LogHandler allLogLevelHandler = new AllLogLevelHandler();
15+
LogHandler debugLogHandler = new DebugLogHandler();
16+
LogHandler errorLogHandler = new ErrorLogHandler();
17+
LogHandler fatalLogHandler = new FatalLogHandler();
18+
LogHandler criticalLogHandler = new CriticalLogHandler();
19+
20+
// Setting up the chain
21+
allLogLevelHandler.setNextHandler(debugLogHandler);
22+
debugLogHandler.setNextHandler(errorLogHandler);
23+
errorLogHandler.setNextHandler(fatalLogHandler);
24+
fatalLogHandler.setNextHandler(criticalLogHandler);
25+
26+
// Log level priority, high rank covers all below handlers
27+
List<LogHandler> logHandlers = new ArrayList<LogHandler>(10);
28+
logHandlers.add(0,allLogLevelHandler);
29+
logHandlers.add(1,debugLogHandler);
30+
logHandlers.add(2,errorLogHandler);
31+
logHandlers.add(3,fatalLogHandler);
32+
logHandlers.add(4,criticalLogHandler);
33+
34+
String repeatRunFlag = "y";
35+
while (!repeatRunFlag.equalsIgnoreCase("no")) {
36+
System.out.println("Please enter message to be logged ");
37+
String message = scan.next();
38+
System.out.println("Please choose the level from 1 to 5 for logging ");
39+
System.out.println("INFO(5), DEBUG(4), ERROR(3), FATAL(2), CRITICAL(1)");
40+
try{
41+
int choice = scan.nextInt();
42+
logHandler = logHandlers.get(choice);
43+
}catch (Exception e){
44+
logHandler = logHandlers.get(0);
45+
}
46+
47+
logHandler.handler(message);
48+
49+
System.out.println("=============================");
50+
51+
System.out.println("Press No to Exit and any other character to repeat .... ");
52+
try {
53+
repeatRunFlag = scan.next();
54+
} catch (Exception e) {
55+
repeatRunFlag = "n";
56+
}
57+
}
58+
59+
System.out.println("\n $$$$$$$$$$$$$$$$$$$$ Thanks by Prem Aseem $$$$$$$$$$$$$$$$$$$$$$ \n ");
60+
System.out.println("\n $$$$$$$$$$$$$$$$$$$$$ www.premaseem.me $$$$$$$$$$$$$$$$$$$$$$ \n ");
61+
}
62+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.premaseem.chainOfResponsibility.loggerProgram;
2+
3+
public abstract class LogHandler {
4+
5+
6+
public enum LOG_LEVEL {
7+
INFO(5),
8+
DEBUG(4),
9+
ERROR(3),
10+
FATAL(2),
11+
CRITICAL(1);
12+
13+
Integer priority =1;
14+
LOG_LEVEL(int priorityLevel){
15+
priority = priorityLevel;
16+
}
17+
}
18+
19+
LogHandler nextHandler = null;
20+
21+
public void setNextHandler(LogHandler nextHandler) {
22+
this.nextHandler = nextHandler;
23+
}
24+
25+
public void handler(String message) {
26+
System.out.printf(" %s console is printing message = %S \n " , this.getClass().getSimpleName(), message );
27+
if(nextHandler !=null){
28+
nextHandler.handler(message);
29+
}
30+
}
31+
}
32+
33+
class AllLogLevelHandler extends LogHandler{
34+
35+
}
36+
37+
class DebugLogHandler extends LogHandler{
38+
39+
}
40+
41+
class ErrorLogHandler extends LogHandler{
42+
43+
}
44+
45+
class FatalLogHandler extends LogHandler{
46+
47+
}
48+
49+
class CriticalLogHandler extends LogHandler{
50+
51+
}

0 commit comments

Comments
 (0)