Skip to content

Commit 86ddb70

Browse files
committed
#4 add chain of responsibility pattern example - logger - into project
1 parent 791e31b commit 86ddb70

File tree

8 files changed

+126
-0
lines changed

8 files changed

+126
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,5 @@ Reference: https://gpcoder.com/4644-huong-dan-java-design-pattern-proxy/
8181
### Chain of Responsibility
8282

8383
Reference: https://gpcoder.com/4665-huong-dan-java-design-pattern-chain-of-responsibility/
84+
85+
> Review: Suitable for create and push Alert through applications (tools) by level
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.phint2.pattern.behavioral.cor.logger;
2+
3+
public class AppLogger {
4+
5+
public static Logger getLogger() {
6+
7+
Logger consoleLogger = new ConsoleLogger(LogLevel.DEBUG);
8+
Logger fileLogger = consoleLogger.setNext(new FileLogger(LogLevel.ERROR));
9+
fileLogger.setNext(new MailLogger(LogLevel.FATAL));
10+
return consoleLogger;
11+
}
12+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.phint2.pattern.behavioral.cor.logger;
2+
3+
/*
4+
* Chain of Responsibility Pattern Example
5+
* */
6+
public class Client {
7+
8+
public static void main(String[] args) {
9+
10+
// Build the chain of responsibility
11+
Logger logger = AppLogger.getLogger();
12+
13+
// Handled by ConsoleLogger since the console has a LogLevel of DEBUG
14+
logger.log(LogLevel.INFO, "Info message");
15+
logger.log(LogLevel.DEBUG, "Debug message");
16+
17+
// Handled by ConsoleLogger and FileLogger
18+
logger.log(LogLevel.ERROR, "Error message");
19+
20+
// Handled by ConsoleLogger, FileLogger, MailLogger
21+
logger.log(LogLevel.FATAL, "Fatal message");
22+
}
23+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.phint2.pattern.behavioral.cor.logger;
2+
3+
public class ConsoleLogger extends Logger {
4+
5+
public ConsoleLogger(LogLevel logLevel) {
6+
super(logLevel);
7+
}
8+
9+
@Override
10+
protected void writeMessage(String message) {
11+
System.out.println("Console logger: " + message);
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.phint2.pattern.behavioral.cor.logger;
2+
3+
public class FileLogger extends Logger {
4+
5+
public FileLogger(LogLevel logLevel) {
6+
super(logLevel);
7+
}
8+
9+
@Override
10+
protected void writeMessage(String message) {
11+
System.out.println("File logger: " + message);
12+
}
13+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.phint2.pattern.behavioral.cor.logger;
2+
3+
public enum LogLevel {
4+
5+
NONE(0),
6+
INFO(1),
7+
DEBUG(2),
8+
WARNING(4),
9+
ERROR(8),
10+
FATAL(16),
11+
ALL(32);
12+
13+
private int level;
14+
15+
private LogLevel(int level) {
16+
this.level = level;
17+
}
18+
19+
public int getLevel() {
20+
return level;
21+
}
22+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.phint2.pattern.behavioral.cor.logger;
2+
3+
public abstract class Logger {
4+
5+
protected LogLevel logLevel;
6+
protected Logger nextLogger; // The next Handler in the chain
7+
8+
public Logger(LogLevel logLevel) {
9+
this.logLevel = logLevel;
10+
}
11+
12+
// Set the next logger to make a list/chain of Handlers.
13+
public Logger setNext(Logger nextLogger) {
14+
this.nextLogger = nextLogger;
15+
return nextLogger;
16+
}
17+
18+
public void log(LogLevel severity, String message) {
19+
if (this.logLevel.getLevel() <= severity.getLevel()) {
20+
writeMessage(message);
21+
}
22+
if (nextLogger != null) {
23+
nextLogger.log(severity, message);
24+
}
25+
}
26+
27+
protected abstract void writeMessage(String message);
28+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.phint2.pattern.behavioral.cor.logger;
2+
3+
public class MailLogger extends Logger {
4+
5+
public MailLogger(LogLevel logLevel) {
6+
super(logLevel);
7+
}
8+
9+
@Override
10+
protected void writeMessage(String message) {
11+
System.out.println("Mail logger: " + message);
12+
}
13+
}

0 commit comments

Comments
 (0)