責(zé)任鏈模式為請(qǐng)求創(chuàng)建一個(gè)接收者對(duì)象列表。
這種模式是行為模式。
當(dāng)使用責(zé)任鏈模式時(shí),通常每個(gè)接收器包含對(duì)另一個(gè)接收器的引用。
如果一個(gè)對(duì)象不能處理請(qǐng)求,則它將相同的對(duì)象傳遞給下一個(gè)接收者,等等。
abstract class Logger { protected Logger nextLogger; public void setNextLogger(Logger nextLogger){ this.nextLogger = nextLogger; } public void logMessage(String message){ log(message); if(nextLogger !=null){ nextLogger.logMessage(message); } } abstract protected void log(String message); } class ConsoleLogger extends Logger { public ConsoleLogger(){ } @Override protected void log(String message) { System.out.println("Console::Logger: " + message); } } class EMailLogger extends Logger { public EMailLogger(){ } @Override protected void log(String message) { System.out.println("EMail::Logger: " + message); } } class FileLogger extends Logger { public FileLogger(){ } @Override protected void log(String message) { System.out.println("File::Logger: " + message); } } public class Main { private static Logger getChainOfLoggers(){ Logger emailLogger = new EMailLogger(); Logger fileLogger = new FileLogger(); Logger consoleLogger = new ConsoleLogger(); emailLogger.setNextLogger(fileLogger); fileLogger.setNextLogger(consoleLogger); return emailLogger; } public static void main(String[] args) { Logger loggerChain = getChainOfLoggers(); loggerChain.logMessage("Null pointer"); loggerChain.logMessage("Array Index Out of Bound"); loggerChain.logMessage("Illegal Parameters"); } }
上面的代碼生成以下結(jié)果。
更多建議: