Last active
May 20, 2017 11:59
-
-
Save solaris33/a7b9b722585d045de9eabe31b93c00ab to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class Logger { | |
public static int ERR = 3; | |
public static int NOTICE = 5; | |
public static int DEBUG = 7; | |
protected int mask; | |
// The next element in the chain of responsibility | |
protected Logger next; | |
public Logger setNext(Logger log) { | |
next = log; | |
return log; | |
} | |
public void message(String msg, int priority) { | |
if (priority <= mask) { | |
writeMessage(msg); | |
} | |
if (next != null) { | |
next.message(msg, priority); | |
} | |
} | |
abstract protected void writeMessage(String msg); | |
} | |
class StdoutLogger extends Logger { | |
public StdoutLogger(int mask) { | |
this.mask = mask; | |
} | |
protected void writeMessage(String msg) { | |
System.out.println("Writing to stdout: " + msg); | |
} | |
} | |
class EmailLogger extends Logger { | |
public EmailLogger(int mask) { | |
this.mask = mask; | |
} | |
protected void writeMessage(String msg) { | |
System.out.println("Sending via email: " + msg); | |
} | |
} | |
class StderrLogger extends Logger { | |
public StderrLogger(int mask) { | |
this.mask = mask; | |
} | |
protected void writeMessage(String msg) { | |
System.err.println("Sending to stderr: " + msg); | |
} | |
} | |
public class ChainOfResponsibilityExample { | |
public static void main(String[] args) { | |
// Build the chain of responsibility | |
Logger logger, tempLogger; | |
tempLogger = new StdoutLogger(Logger.DEBUG); | |
logger = tempLogger; | |
tempLogger = tempLogger.setNext(new EmailLogger(Logger.NOTICE)); | |
tempLogger = tempLogger.setNext(new StderrLogger(Logger.ERR)); | |
// Handled by StdoutLogger | |
logger.message("Entering function y.", Logger.DEBUG); | |
// Handled by StdoutLogger and EmailLogger | |
logger.message("Step1 completed.", Logger.NOTICE); | |
// Handled by all three loggers | |
logger.message("An error has occurred.", Logger.ERR); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment