顾名思义,责任链模式(Chain of Responsibility Pattern) 为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
责任链(Chain Of Responsibility)
Class Diagram
Implementation
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 
 | 
 
 
 
 
 public abstract class AbstractLogger {
 public static int INFO = 1;
 public static int DEBUG = 2;
 public static int ERROR = 3;
 
 protected int level;
 
 
 protected AbstractLogger nextLogger;
 
 public void setNextLogger(AbstractLogger nextLogger) {
 this.nextLogger = nextLogger;
 }
 
 public void logMessage(int level, String message) {
 if (this.level <= level) {
 write(message);
 }
 if (nextLogger != null) {
 nextLogger.logMessage(level, message);
 }
 }
 
 abstract protected void write(String message);
 }
 
 
 public class ConsoleLogger extends AbstractLogger {
 public ConsoleLogger(int level){
 this.level = level;
 }
 
 protected void write(String message) {
 System.out.println("Standard Console::Logger: " + message);
 }
 }
 
 
 public class ErrorLogger extends AbstractLogger {
 public ErrorLogger(int level){
 this.level = level;
 }
 
 protected void write(String message) {
 System.out.println("Error Console::Logger: " + message);
 }
 }
 
 
 public class FileLogger extends AbstractLogger {
 
 public FileLogger(int level){
 this.level = level;
 }
 
 protected void write(String message) {
 System.out.println("File::Logger: " + message);
 }
 }
 
 
 
 
 
 
 
 public class LoggerFactroy {
 
 private LoggerFactroy(){}
 
 public static AbstractLogger getLogger(){
 AbstractLogger logger = new ErrorLogger(AbstractLogger.ERROR);
 AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
 AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);
 
 logger.setNextLogger(fileLogger);
 fileLogger.setNextLogger(consoleLogger);
 return logger;
 }
 }
 
 | 
测试类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | public class ChainOfResponsibilityPatternTest {
 @Test
 public void test() throws Exception {
 AbstractLogger logger = LoggerFactroy.getLogger();
 logger.logMessage(AbstractLogger.INFO, "This is an information.");
 
 logger.logMessage(AbstractLogger.DEBUG,
 "This is a debug level information.");
 
 logger.logMessage(AbstractLogger.ERROR,
 "This is an error information.");
 }
 }
 
 | 
Example
- [javax.servlet.Filter#doFilter()