File tree Expand file tree Collapse file tree 8 files changed +126
-0
lines changed
design-pattern/src/main/java/com/phint2/pattern/behavioral/cor/logger Expand file tree Collapse file tree 8 files changed +126
-0
lines changed Original file line number Diff line number Diff line change @@ -81,3 +81,5 @@ Reference: https://gpcoder.com/4644-huong-dan-java-design-pattern-proxy/
8181### Chain of Responsibility
8282
8383Reference: 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
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments